#include <iostream> #include <string> using namespace std; class Date { friend class person; public: int year,month,day; friend ostream & operator <<( ostream&os, const Date&date ) { os<<date.year<<""<<date.month<<""<<date.day; return os; } Date(int year=2000,int month=1,int day=1):year(year),month(month),day(day) {} void print() { cout<<year<<","<<month<<","<<day; } }; class person { public: string Name; string Num; Date brith; person(string Name="张三", string Num="123456789", int year=2000,int month=1,int day=1): Name(Name),Num(Num),brith(year,month,day) {} string GetName() { return Name; } string GetNum() { return Num; } Date Getbrith() { return brith; } }; bool compare(person&p1,person&p2) { if(person&p1.year>person&p2.year) { return true; } else { return false; } } if(compare(person&p1.year,person&p2.year)) { cout<<"p1的年龄大"<<endl; } else { cout<<"p2的年龄大"<<end; } class student: private person { private: int StuNum; }; class teacher:public person { private: Date Time; }; class CTA :public student,public teacher { private: int No; }; int main() { person p1("张三","123456789",2000,1,1); person p2("李四","123456789",2001,1,1); cout<<"序号"<<endl; cout<<" 1 "<<endl; cout<<" "<<p1.GetName()<<endl; cout<<" "<<p1.GetNum()<<endl; cout<<" "<<p1.Getbrith()<<endl; cout<<" 2 "<<endl; cout<<" "<<p2.GetName()<<endl; cout<<" "<<p2.GetNum()<<endl; cout<<" "<<p2.Getbrith()<<endl; }改进后的程序

时间: 2023-10-30 21:26:24 浏览: 25
#include <iostream> #include <string> using namespace std; class Date { friend class Person; public: int year,month,day; friend ostream & operator <<( ostream&os, const Date&date ) { os<<date.year<<"年"<<date.month<<"月"<<date.day<<"日"; return os; } Date(int year=2000,int month=1,int day=1):year(year),month(month),day(day) {} }; class Person { public: string Name; string Num; Date brith; Person(string Name="张三", string Num="123456789", int year=2000,int month=1,int day=1): Name(Name),Num(Num),brith(year,month,day) {} string GetName() const { return Name; } string GetNum() const { return Num; } Date Getbrith() const { return brith; } }; bool compare(const Person &p1, const Person &p2) { if(p1.brith.year > p2.brith.year) { return true; } else { return false; } } int main() { Person p1("张三","123456789",2000,1,1); Person p2("李四","123456789",2001,1,1); cout<<"序号"<<endl; cout<<" 1 "<<endl; cout<<" "<<p1.GetName()<<endl; cout<<" "<<p1.GetNum()<<endl; cout<<" "<<p1.Getbrith()<<endl; cout<<" 2 "<<endl; cout<<" "<<p2.GetName()<<endl; cout<<" "<<p2.GetNum()<<endl; cout<<" "<<p2.Getbrith()<<endl; if(compare(p1, p2)) { cout<<"p1的年龄大"<<endl; } else { cout<<"p2的年龄大"<<endl; } } ``` 改进的地方: 1. 将类名改为首字母大写的驼峰命名法,以符合常规的命名规范。 2. 将友元函数的返回值类型改为 `ostream&`,并将运算符 `<<` 的左操作数改为 `ostream&`,以使友元函数能够支持链式输出。 3. 将 `compare` 函数的参数改为 `const Person&` 类型的引用,以避免不必要的拷贝和修改。 4. 将 `GetName()`、`GetNum()` 和 `Getbrith()` 函数的返回值类型改为 `const string&` 和 `const Date&`,以避免不必要的拷贝。同时,将这些函数声明为 `const` 成员函数,以表示这些函数不会修改成员变量。 5. 将 `compare` 函数中的比较操作符改为成员变量的比较,以遵循面向对象的设计原则。 6. 修改了输出格式,使其更易读。

相关推荐

好的,以下是手动实现这些头文件里所有的STL容器的代码: // iostream namespace mystd { class ostream { public: ostream& operator<<(const char* str) { // 实现输出字符串的逻辑 return *this; } // 其他重载运算符和成员函数 }; static ostream cout; } // memory namespace mystd { template<typename T> class allocator { public: using value_type = T; // 实现分配和释放内存的函数 }; } // stack namespace mystd { template<typename T, typename Container = mystd::vector<T>> class stack { public: using value_type = T; using container_type = Container; // 实现栈的各种函数 }; } // fstream namespace mystd { class filebuf { public: // 实现文件缓冲区相关函数 }; class ifstream { public: ifstream(const char* filename) { // 实现打开文件的逻辑 } // 实现读取文件的逻辑 }; class ofstream { public: ofstream(const char* filename) { // 实现打开文件的逻辑 } // 实现写入文件的逻辑 }; } // vector namespace mystd { template<typename T, typename Allocator = mystd::allocator<T>> class vector { public: using value_type = T; using allocator_type = Allocator; // 实现vector的各种函数 }; } // cmath namespace mystd { double pow(double base, double exponent) { // 实现求幂函数 } // 其他数学函数的实现 } // iomanip namespace mystd { class setprecision { public: setprecision(int n) { // 实现设置输出精度的逻辑 } // 其他重载运算符和成员函数 }; } // exception namespace mystd { class exception { public: virtual const char* what() const noexcept { return "Unknown exception"; } }; } // climits namespace mystd { constexpr int INT_MAX = 2147483647; // 其他常量的定义 } // array namespace mystd { template<typename T, std::size_t N> class array { public: using value_type = T; // 实现数组的各种函数 }; } // cstdint namespace mystd { using int8_t = signed char; using int16_t = short int; using int32_t = int; using int64_t = long long int; // 其他数据类型的定义 } // string namespace mystd { class string { public: // 实现字符串的各种函数 }; } 以上代码只是简单实现了各个STL容器的基本功能,具体实现方式和函数可能会有所不同,仅供参考。

最新推荐

Java毕业设计--SpringBoot+Vue的智慧外贸平台(附源码,数据库,教程).zip

Java 毕业设计,Java 课程设计,基于 SpringBoot +Vue 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

运用MATLAB数字信号处理matlab系统.zip

运用MATLAB数字信号处理matlab系统.zip

大学生创客-大学生创客平台-大学生创客平台源码-大学生创客平台java代码-基于Web的大学生创客平台设计与实现-java代码

大学生创客-大学生创客平台-大学生创客平台源码-大学生创客平台java代码-大学生创客平台设计与实现-基于ssm的大学生创客平台-基于Web的大学生创客平台设计与实现-大学生创客网站-大学生创客网站源码-大学生创客网站java代码-大学生创客项目-大学生创客项目代码-大学生创客系统-大学生创客系统源码-大学生创客管理系统-大学生创客管理系统java代码-大学生创客代码 1、技术栈:java,ssm,spring,springmvc,vue,ajax,maven,mysql,MyBatisPlus等 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:SQLyog/Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器 2、系统的实现 用户信息 图片素材 视频素材 摘 要 I 目 录 III 第1章 绪论 1 1.1选题动因 1 1.2背景与意义 1 第2章 相关技术介绍 3 2.1 MySQL数据库 3 2.2 Vue前端技术 3 2.3 B/S架构模式 4 2.4 E

MI Band 2 (小米手环2)

这套小米手环APP源码,,是实现深度定制、功能拓展的理想基础。以下是该源码主要功能特点的详细介绍: 1. **设备连接与数据同步**:源码具备高效稳定的蓝牙连接模块,可实现实时、准确的手环与手机之间的数据同步,包括运动步数、心率、睡眠质量等健康监测数据。 2. **全面健康监测**:内置丰富的健康算法模型,支持对用户各项生理指标进行实时监测和数据分析,如心率预警、久坐提醒、睡眠分析等健康管理功能。 3. **个性化表盘定制**:开放式的表盘设计与更换功能,允许开发者根据个人喜好或商业需求,自定义设计并导入多种风格的表盘样式。 4. **多元化运动模式**:集成多种运动模式识别与记录功能,无论是跑步、骑行还是游泳,都能精确追踪并提供详尽的数据报告。 5. **消息通知提醒**:对接手机端各类应用消息推送,实现来电、短信、社交软件等消息在手环上的实时提醒,确保重要信息不错过。 6. **电量管理优化**:通过精细的电量监控与节能策略,有效延长手环续航时间,为用户提供更持久的使用体验。 拥有此款小米手环APP源码,不仅能够深入了解小米手环的工作机制,更能在此基础上进行二次开发,满足您对手环功能扩展、个性化定制的需求,赋能未来智能生活。

输入输出方法及常用的接口电路资料PPT学习教案.pptx

输入输出方法及常用的接口电路资料PPT学习教案.pptx

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

Office 365常规运维操作简介

# 1. Office 365概述 ## 1.1 Office 365简介 Office 365是由微软提供的云端应用服务,为用户提供办公软件和生产力工具的订阅服务。用户可以通过互联网在任何设备上使用Office应用程序,并享受文件存储、邮件服务、在线会议等功能。 ## 1.2 Office 365的优势 - **灵活性**:用户可以根据实际需求选择不同的订阅计划,灵活扩展或缩减服务。 - **便捷性**:无需安装繁琐的软件,随时随地通过互联网访问Office应用程序和文件。 - **协作性**:多人可同时编辑文档、实时共享文件,提高团队协作效率。 - **安全性**:微软提供安全可靠

如何查看linux上安装的mysql的账号和密码

你可以通过以下步骤查看 Linux 上安装的 MySQL 的账号和密码: 1. 进入 MySQL 安装目录,一般是 /usr/local/mysql/bin。 2. 使用以下命令登录 MySQL: ``` ./mysql -u root -p ``` 其中,-u 表示要使用的用户名,这里使用的是 root;-p 表示需要输入密码才能登录。 3. 输入密码并登录。 4. 进入 MySQL 的信息库(mysql): ``` use mysql; ``` 5. 查看 MySQL 中的用户表(user): ``` se

最新电力电容器及其配套设备行业安全生产设备设施及隐患排查治理.docx

2021年 各行业安全生产教育培训

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依