`
_jia_shun
  • 浏览: 27242 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

C++大学基础教程_10_3_组成:对象作为类的成员

 
阅读更多
//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;
}

 

 

  • 大小: 136.5 KB
分享到:
评论

相关推荐

    C++基础教程_完整版 - 副本.pdf

    面向对象编程是C++的核心特性之一,它包括类的概念,类中可以包含数据成员和成员函数,构造函数和析构函数用于创建和销毁对象。类之间的关系如继承、友元以及多态也是面向对象编程的重要组成部分,其中多态通过虚...

    C++语言基础教程课后答案

    通过清华大学出版社吕凤翥教授的《C++语言基础教程》第二版,读者可以深入学习这些概念,并通过课后习题加强理解和应用。解答习题可以帮助巩固知识,提高编程技能。例如,程序输出问题涉及字符串拼接、输入输出流的...

    c++大学基础教程,在线文档

    这篇“C++大学基础教程”旨在为初学者提供一个全面且易于理解的学习平台。在线文档的形式使得学习者可以随时随地查阅和学习,无需下载安装额外的软件,方便快捷。 教程可能会涵盖以下核心知识点: 1. **基本语法**...

    c++大学教程PPT(够详细了吧)

    这份"大学教程PPT"涵盖了C++的基础知识以及高级特性,旨在帮助学生和初学者深入理解这门语言。以下是对C++的一些关键知识点的详细阐述: 1. **C++简介**:C++是由Bjarne Stroustrup于1979年在贝尔实验室开发的,它...

    C++大学教程答案(第二版)

    总的来说,这份《C++大学教程答案(第二版)》压缩包对于正在学习C++的大学生或自学者来说是一份宝贵的资源,通过分析和理解其中的解答,可以加深对C++语言的理解,提升编程能力,为今后的软件开发打下坚实基础。...

    C++大学教程(第七版)书中例子

    《C++大学教程》第七版是一本深受广大编程学习者喜爱的教材,它全面而深入地介绍了C++编程语言的基础知识、高级特性以及实践应用。这个压缩包包含了书中的实例代码,是理论学习与实际操作相结合的重要参考资料。下面...

    Visual C++面向对象编程教程

    《Visual C++面向对象编程教程》是清华大学王育坚教授编著的一本深入浅出的教材,旨在教授读者如何利用Microsoft的Visual C++环境进行面向对象的程序设计。该书结合了理论与实践,旨在帮助初学者理解面向对象编程的...

    清华大学+C++教程

    1. 类与对象:C++的核心特性之一是面向对象编程,类是对象的模板,定义了对象的属性(数据成员)和行为(成员函数)。对象是类的实例,可以具有类所定义的属性和行为。 2. 封装:通过类的定义,可以将数据和操作...

    c++大学教程 c++教程

    作为一款中级语言,它融合了过程化编程、面向对象编程和泛型编程的特点,使得C++既具有底层控制能力,又支持高级抽象。本教程旨在帮助朋友们快速掌握C++开发技术,提升编程技能。 C++的基础始于C语言,它扩展了...

    清华大学c++例题源码

    2. **类与对象**:C++中的核心特性是面向对象编程,其中类是对象的蓝图,定义了对象的状态(数据成员)和行为(成员函数)。对象则是类的实例,具有类定义的属性和方法。 3. **封装**:通过类,可以实现数据封装,...

    c++大学教程各章节代码

    本教程的压缩包文件包含了C++大学教程的各章节代码示例,旨在帮助学生和初学者深入理解C++语言的基础概念、语法以及高级特性。 1. **基础语法** C++的基础语法包括变量定义、数据类型(如int、float、char)、...

    《C++程序设计教程》钱能_清华_习题原版答案全集

    《C++程序设计教程》是钱能教授在清华大学讲授C++编程时所著的一本经典教材,旨在帮助初学者掌握C++语言的基础知识和高级特性。这本书以其深入浅出的讲解方式,丰富的实例和习题深受广大读者喜爱。本文将针对该书中...

    浙江大学C++ ppt详细教程

    4. **类与对象**:C++的核心是面向对象编程,类是对象的蓝图,定义了对象的属性(数据成员)和行为(成员函数)。对象则是类的实例,具有类定义的所有属性和行为。 5. **构造函数与析构函数**:构造函数是在创建...

    C++大学教程,一本适合初学者的入门教材(part1)

    7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串...

    C++程序设计教程课后习题答案【钱能】清华版.zip

    2. **类与对象**:C++是面向对象的语言,类是对象的蓝图,对象则是类的实例。理解和使用类与对象是学习C++的关键。习题可能会涉及如何定义类、声明成员函数、构造函数、析构函数以及对象的创建和使用。 3. **封装**...

    C++程序设计教程课后习题答案【钱能】清华版

    1. **C++基础知识**:C++是面向对象的编程语言,它继承了C语言的高效性和灵活性,并引入了类、对象、继承、多态等概念。学习C++需要掌握的基本元素包括变量、数据类型、运算符、流程控制(如if语句、switch语句、...

    C++教程 大学课件

    10. **STL(Standard Template Library)**:STL是C++标准库的一个重要组成部分,包含了容器(如向量、列表、映射等)、迭代器、算法和函数对象。熟悉STL可以显著提升C++编程的效率和代码质量。 这个大学课件涵盖了...

    C++程序设计教程课后习题答案【钱能】

    在本资源"C++程序设计教程课后习题答案【钱能】"中,我们主要探讨的是C++这一编程语言的基础知识及其应用。该资源是针对《C++程序设计教程》一书,由钱能教授编著,清华大学出版社出版的配套习题解答。这是一份非常...

    c++大学教程压缩版

    《C++大学教程压缩版》是一本专门为大学生设计的C++学习资料,旨在帮助学生深入理解和掌握这门广泛应用于计算机科学、软件工程以及各种领域的编程语言。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅...

Global site tag (gtag.js) - Google Analytics