//Date.h #ifndef DATE_H #define DATE_H class Date { public: Date(int = 1,int = 1,int = 1900);//参数分别为月日年 ~Date(); void print() const ; private: int month; int day; int year; int checkDay(int) const ;//检验每月的天数是否符合逻辑 }; #endif
//Date.cpp #include "Date.h" #include <iostream> using namespace std; Date::Date(int mh,int dy,int yr) { if(mh >0 && mh <= 13) month = mh; else{ month = 1; cout << "Invalid month (" << mh << ") set to 1.\n"; } year = yr; day = checkDay(dy); cout << "Date object constructor for date "; print(); } Date::~Date() { cout << "Date object destructor for date "; print(); } void Date::print() const { cout << month << '/' << day << '/' << year << endl; } int Date::checkDay(int testDay) const { //平年中的每月天数1-12月分别对应daysPerMonth[1]-[12] static const int daysPerMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //一般情况 if(testDay>0 && testDay <= daysPerMonth[month]) return testDay; //闰年情况 if(month==2 && testDay==29 &&(year%400==0 || (year%4==0 && year%100!=0))) return testDay; //其他情况 cout << "Invalid day (" << testDay << ") set to 1.\n"; return 1; }
//Employee.h #ifndef EMPLOYEE_H_ #define EMPLOYEE_H_ #include "Date.h" class Employee { public: //构造函数参数分别为名,姓,出生日期,开始工作的日期 Employee(const char * const,const char * const,const Date &,const Date &); ~Employee(); void print() const; private: char firstName[25]; char lastName[25]; const Date birthDate; const Date hireDate; }; #endif
//Employee.cpp #include "Employee.h" #include "Date.h" #include <iostream> #include <cstring>/*using std::strlen using std::strncpy*/ using namespace std; Employee::Employee(const char * const first,const char * const last, const Date &dateOfBirth,const Date &dateOfHire) : birthDate(dateOfBirth), hireDate(dateOfHire) //成员初始化器 { int length = strlen(first); length = (length < 25 ? length : 24); strncpy(firstName,first,length); firstName[length] = '\0'; length = strlen(last); length = (length < 25 ? length : 24); strncpy(lastName,last,length); lastName[length] = '\0'; cout << "Employee object constructor: " << firstName << " " << lastName << endl; } Employee::~Employee() { cout << "Employee object destructor:" << firstName << " " << lastName << endl; } void Employee::print() const { cout << firstName << "," << lastName << endl; cout << " Hired:"; hireDate.print(); cout << "BirthDay:"; birthDate.print(); }
//main.cpp #include "Employee.h" #include <iostream> using namespace std; int main() { {//这个大括号仅仅为了测试析构函数是否正常工作,可以去掉,, Date birth(7,24,1959); Date hire(3,12,1988); Employee manager("Bob","Lanester",birth,hire); cout << endl; manager.print(); cout << "\nTest Date constructor with invalid values:\n"; Date lastDayOff(14,35,1976); } system("pause >> cout"); return 0; }
相关推荐
面向对象编程是C++的核心特性之一,它包括类的概念,类中可以包含数据成员和成员函数,构造函数和析构函数用于创建和销毁对象。类之间的关系如继承、友元以及多态也是面向对象编程的重要组成部分,其中多态通过虚...
通过清华大学出版社吕凤翥教授的《C++语言基础教程》第二版,读者可以深入学习这些概念,并通过课后习题加强理解和应用。解答习题可以帮助巩固知识,提高编程技能。例如,程序输出问题涉及字符串拼接、输入输出流的...
这篇“C++大学基础教程”旨在为初学者提供一个全面且易于理解的学习平台。在线文档的形式使得学习者可以随时随地查阅和学习,无需下载安装额外的软件,方便快捷。 教程可能会涵盖以下核心知识点: 1. **基本语法**...
这份"大学教程PPT"涵盖了C++的基础知识以及高级特性,旨在帮助学生和初学者深入理解这门语言。以下是对C++的一些关键知识点的详细阐述: 1. **C++简介**:C++是由Bjarne Stroustrup于1979年在贝尔实验室开发的,它...
总的来说,这份《C++大学教程答案(第二版)》压缩包对于正在学习C++的大学生或自学者来说是一份宝贵的资源,通过分析和理解其中的解答,可以加深对C++语言的理解,提升编程能力,为今后的软件开发打下坚实基础。...
《C++大学教程》第七版是一本深受广大编程学习者喜爱的教材,它全面而深入地介绍了C++编程语言的基础知识、高级特性以及实践应用。这个压缩包包含了书中的实例代码,是理论学习与实际操作相结合的重要参考资料。下面...
《Visual C++面向对象编程教程》是清华大学王育坚教授编著的一本深入浅出的教材,旨在教授读者如何利用Microsoft的Visual C++环境进行面向对象的程序设计。该书结合了理论与实践,旨在帮助初学者理解面向对象编程的...
1. 类与对象:C++的核心特性之一是面向对象编程,类是对象的模板,定义了对象的属性(数据成员)和行为(成员函数)。对象是类的实例,可以具有类所定义的属性和行为。 2. 封装:通过类的定义,可以将数据和操作...
作为一款中级语言,它融合了过程化编程、面向对象编程和泛型编程的特点,使得C++既具有底层控制能力,又支持高级抽象。本教程旨在帮助朋友们快速掌握C++开发技术,提升编程技能。 C++的基础始于C语言,它扩展了...
2. **类与对象**:C++中的核心特性是面向对象编程,其中类是对象的蓝图,定义了对象的状态(数据成员)和行为(成员函数)。对象则是类的实例,具有类定义的属性和方法。 3. **封装**:通过类,可以实现数据封装,...
本教程的压缩包文件包含了C++大学教程的各章节代码示例,旨在帮助学生和初学者深入理解C++语言的基础概念、语法以及高级特性。 1. **基础语法** C++的基础语法包括变量定义、数据类型(如int、float、char)、...
《C++程序设计教程》是钱能教授在清华大学讲授C++编程时所著的一本经典教材,旨在帮助初学者掌握C++语言的基础知识和高级特性。这本书以其深入浅出的讲解方式,丰富的实例和习题深受广大读者喜爱。本文将针对该书中...
4. **类与对象**:C++的核心是面向对象编程,类是对象的蓝图,定义了对象的属性(数据成员)和行为(成员函数)。对象则是类的实例,具有类定义的所有属性和行为。 5. **构造函数与析构函数**:构造函数是在创建...
7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串...
2. **类与对象**:C++是面向对象的语言,类是对象的蓝图,对象则是类的实例。理解和使用类与对象是学习C++的关键。习题可能会涉及如何定义类、声明成员函数、构造函数、析构函数以及对象的创建和使用。 3. **封装**...
1. **C++基础知识**:C++是面向对象的编程语言,它继承了C语言的高效性和灵活性,并引入了类、对象、继承、多态等概念。学习C++需要掌握的基本元素包括变量、数据类型、运算符、流程控制(如if语句、switch语句、...
10. **STL(Standard Template Library)**:STL是C++标准库的一个重要组成部分,包含了容器(如向量、列表、映射等)、迭代器、算法和函数对象。熟悉STL可以显著提升C++编程的效率和代码质量。 这个大学课件涵盖了...
在本资源"C++程序设计教程课后习题答案【钱能】"中,我们主要探讨的是C++这一编程语言的基础知识及其应用。该资源是针对《C++程序设计教程》一书,由钱能教授编著,清华大学出版社出版的配套习题解答。这是一份非常...
《C++大学教程压缩版》是一本专门为大学生设计的C++学习资料,旨在帮助学生深入理解和掌握这门广泛应用于计算机科学、软件工程以及各种领域的编程语言。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅...