}
2-5 2-5 一个名为CPerson的类有以下属性:
姓名、身份证号、性别和年龄,请用C++语言定义这个类,并为上述属性定义相应的方法。
2-6 2-6 设计一个日期类Date,该类用于表示日期值(年、月、日)。
要求除了能够通过相应的成员函数设置和获取日期值外,还能够实现将日期加一天的操作。
2-7 2-7 建立一个名为Student的类,该类有以下几个私有成员变量:
学生姓名、学号、性别和年龄。
还有以下两个成员函数:
一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。
编写一个主函数,声明一个学生对象,然后调用成员函数在屏幕输出学生信息。
2-8 2-8 修改习题2-7中的类Student,添加一个静态成员变量,用于表示已创建对象的数量;添加两个静态成员函数,一个用于输出已创建对象的数量,一个用于输出一个学生的姓名和学号。
2-9 2-9 将习题2-6中类Date的“日期加一天”成员函数改为友元函数。
2-102-10 将习题2-7中类Student的学生信息输出函数改为友元函数。
2-112-11 利用习题2-5中类CPerson派生出类CEmployee(雇员),派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。
要求派生类CEmployee的构造函数显式调用基类CPerson的构造函数,可根据需要为派生类增加新的成员函数。
2-122-12 利用时间类Time和日期类Date(习题2-6)多重派生出日期时间类DateTime,并实现类的基本功能。
2-132-13 假设将例3-11中类BaseA和BaseB的成员函数setA()和setB()的函数名统一改为set(),请重写main()函数。
2-142-14 设类X分别派生出类Y和类Z,类Y和类Z又共同派生出类W,请用虚基类方式定义这些类。
要求为类简单添加一些成员,并编写main()函数进行验证。
2-152-15 为了解决例3-12中由于多重继承而产生的二义性问题,可以利用一个指向基类B(或C)的指针指向派生类D的对象。
请按此方法编程。
2-162-16 编写一个工资管理程序,将雇员类作为所有类的基类,其派生类包括经理类、销售员类、计件工类和小时工类。
经理享有固定的周薪;销售员的收入是一小部分的基本工资加上销售额的提成;计件工的收入完全取决于其生产的工件数量;小时工的收入以小时计算,再加上加班费。
2-172-17 修改例3-10中的程序,为类Point、Circle和Cylinder添加计算面积的成员函数Area(),要求函数Area()采用虚函数的形式,并通过基类指针调用虚函数Area()。
2-182-18 修改例3-10中的程序,将类Point、Circle和Cylinder(圆柱体)的析构函数改为虚析构函数,并编写代码验证你所完成的功能。
2-192-19 修改习题2-16中的程序,将基类的计算工资函数改为纯虚函数。
2-202-20 修改习题2-17中的程序,将类Point的计算面积函数Area()改为纯虚函数。
2-212-21 用函数重载形式编写函数square():
求一个int型或double型参数的平方。
2-222-22 用函数重载方法求两个整数、两个浮点数、两个字符中的最小者。
2-232-23 修改习题2-7中的类Student,增加以下私有成员变量:
高等数学、英语、操作系统、数据结构等四门课的分数和总成绩。
修改或增加以下成员函数:
初始化学生姓名、学号、性别、年龄和四门课分数的构造函数,输入四门课分数的函数,计算学生总成绩的函数,输出学生信息的函数。
编写一个主函数,调用原来的构造函数声明一个学生对象并输入其四门课的分数,再调用新增加的构造函数声明另一个学生对象。
最后分别计算两个学生的总分,并在屏幕输出两个学生的所有信息。
2-242-24 采用类继承的方法(不直接修改类Student)完成习题2-23所要求的功能。
2-252-25 建立一个名为Teacher的类,该类有以下成员变量:
教师姓名、ID号、基本工资、奖金、所得税和实际发放数。
还有以下成员函数:
两个构造函数,一个用于只初始化教师姓名和ID号,一个用于初始化教师姓名、ID号、基本工资、奖金和所得税;一个输入基本工资、奖金和所得税的函数;一个计算实际发放数的函数;一个输出教师信息的函数。
编写主函数,调用第一个构造函数声明一个教师对象并输入其工资,再调用第二个构造函数声明一个教师对象。
最后分别计算两个教师的实际发放数,并在屏幕输出。
2-262-26 为习题2-25中的类Teacher添加两个同名的成员函数Add(),一个函数用于将其他教师的工资加到该教师中(如该教师替其他教师代课),一个函数用于将一个数值加到该教师中(如提高该教师的工资)。
在主函数中编写代码验证你完成的功能。
2-272-27 定义矢量类型,给出平面上两个矢量的加法和减法运算。
要求利用非成员函数重载运算符“+”,利用成员函数重载运算符“-”。
2-282-28 采用重载运算符“++”的方法实现习题2-6要求的“日期加一天”操作。
2-292-29 采用重载运算符“+”的方法完成习题2-26中的两种工资增加功能。
2-302-30 编写一个函数模板:
求三个数中的最大数。
2-312-31 编写一个冒泡排序的函数模板,并利用它分别对int型数和字符进行排序。
2-322-32 定义一个Interger类模板,用它来实现C++的各种整数类型。
2-332-33 定义一个堆栈的类模板,并实现堆栈初始化、进栈和出栈等操作。
2-342-34 采用另一种方法完成习题2-16:
将计算工资函数定义为非成员函数(不作为每一个类的成员函数)。
提示:
使用RTTI技术,将基类指针作为非成员函数的参数。
2-352-35 定义一个类和派生类,并分别声明它们的对象,然后输出对象的类型。
2-1 2-1 以下程序有什么错误?
如有请改正它。
#include
class Point
{
int x,y;
public:
void Display(){cout<<"x="<};
main()
{
Point point1;
point1.x=100;
point1.y=200;
point1.Display();
}
2-2 2-2 写出下列程序运行后的输出结果。
#include
class Time{
private:
int hour,minute,second;
public:
void setTime(int h,int m,int s)
{
hour=(h>=0&&h<24)?
h:
0;
minute=(m>=0&&m<60)?
m:
0;
second=(s>=0&&s<60)?
s:
0;
};
void showTime(){cout<'<'<};
void main()
{
Time t1;
t1.setTime(14,52,66);
cout<<"Thetimeis:
";
t1.showTime();
}
2-3 2-3 以下程序段有什么错误?
并请予以修改。
(1)使用静态成员函数。
#include
#include
class Person{
public:
char m_strName[20];
long m_ID;
public:
Person(char*strName,long ID){strcpy(m_strName,strName);m_ID=ID;}
static long GetID(){return m_ID;}
};
void main()
{
Person person1("LiuJun",1101640524);
cout<<"ID="<:
GetID(person1)<<'\n';
}
(2)派生类构造函数自动调用基类的构造函数。
#include
class Point
{
protected:
int x,y;
public:
Point(int a,int b) {x=a;y=b;};
int getX(){return x;};
int getY(){return y;