}
~X(){delete s;}
void display(){ cout<<\};
void main(){ X x1(\ X x2(x1); //拷贝构造(指针悬挂) X x3=x1; //拷贝构造(指针悬挂) x2.display(); x3.display(); } 答:
从上到下s=ok 依次为: s=ok
3、 请阅读程序,按顺序写出程序的运行结果。(P183,第5(1)题,ex6-5-3.cpp) #include
Number(int x):n(x){ }
Number& operator++(){ ++n; return *this; } Number& operator++(int){ n++; return *this;} friend Number &operator--(Number &o); friend Number &operator--(Number o, int);
void display(){ cout<<\ \};
Number &operator--(Number &o){ --o.n; return o; } Number &operator--(Number o,int){ o.n--; return o; } void main(){
Number N1(10); ++ ++ ++N1; N1.display(); N1++;
N1.display(); --N1;
N1.display(); N1-- -- --; N1.display(); } /*
This Number is: 13 This Number is: 14 This Number is: 13
This Number is: 13 */ 答:
从上到下This Number is: 13 依次为: This Number is: 14
This Number is: 13 This Number is: 13
4、 请阅读程序,按顺序写出程序的运行结果。(P183,第5(1)题,ex6-5-4.cpp)
——不要求! #include
char *name; int age;
double Money; public:
Student(char *n=\Age=17,double Mey=1000.998):age(Age),Money(Mey){ name=new char[sizeof(n)+1]; strcpy(name, n); }
operator char*(){ return name; } //重载:函数调用运算符“()” operator int(){ return age; } //重载:函数调用运算符“()” operator double(){ return Money; } //重载:函数调用运算符“()” };
void main(){
Student s1(\阿瓦尔古丽\ char *Name=s1; //相当于:s1.char*() int Age=s1; //相当于:s1.int() double Money=s1; //相当于:s1.double()
cout< cout< 从上到下阿瓦尔古丽 19 280001 依次为: 武昌鱼 17 1001 4.7. 补充题 1、 请阅读程序,根据对象的构造原则和构造顺序,按程序的执行顺序写出程序 的输出结果。注意:请在输出结果之前加“(*)”标示输出顺序。 #include class A{ private: int x; public: A():x(6){ cout<<\ } A(int i):x(i){ cout<<\ } ~A(){ cout<<\ } }; class B{ int y; A x1[3]; A x2; public: B(int j):y(j),x2(j){ cout<<\ } ~B(){ cout<<\ } }; void main(){ A a1(32), a2(50); B b1(23); } 答: (1)A::A(int)--32 (2)A::A(int)--50 8)B::~B() 9)A::~A() (((3)A::A()--6 (4)A::A()--6 (5)A::A()--6 (6)A::A(int)--23 (7)B::B(int)--23 (10)A::~A() (11)A::~A() (12)A::~A() (13)A::~A() (14)A::~A() 5. 程序设计题 5.1. 类与对象 5.1.1. 人员类Person 设计一个用于人事管理的人员类Person。具体要求如下: (1)人员类Person具有四个数据成员:姓名name(字符指针char*类型)、身 份证号码sid(字符数组char[20]类型)、性别sex(char类型,男性’M’&女性’F’)、出生日期birthday。注意,不必考虑身份证中的可能有的日期与出生日期的一致性。其中, a)出生日期birthday为一个对象成员,即日期类Date的内嵌对象。 b)日期类Date包括三个数据成员:年份year(int类型)、月份month(int 类型)、日子day(int类型); c)日期类Date中具有一个含年、月、日三个参数的构造函数,月份和日期 两个参数具有默认参数值3月5日; d)定义成员方法int getYear()、int getMonth()和int getDay(),分别用于返回 年月日信息; (2)人员类Person具有两个重载的构造函数,其一只提供姓名、身份证号码、 性别和出生年份等四个参数,且性别参数具有默认值’M’、出生年份参数具有默认值1992;其二提供了姓名、身份证号码、性别、出生年/月/日等六个参数,且性别参数具有默认值’M’、 年月日参数具有默认值1986年4月7日。注意,在对象的构造函数定义中,必须使用初始化参数列表来实现对象成员的构造; (3)为人员类Person提供自定义的析构函数,以回收动态分配给人员姓名的存 储空间; (4)为人员类Person提供自定义的拷贝构造函数,实现人员对象的拷贝; (5)为人员类Person添加成员函数void display(),用于输出人员的具体信息; 具有上述功能的人员类Person的测试代码及相应输出结果如下: void main(){ Person wang(\ wang.display(); //L1 Person zhao(\王依\ zhao.display(); //L2 } ? Person li = wang; li.display(); 程序输出: //或者 Person li(wang); //L3 L1:姓名: Jasone, 身份证号: 350423X, 性别: M, 出生日期:1992年3月5日 L2:姓名: 王依, 身份证号: 362329X, 性别: F, 出生日期:1987年4月5日 L3:姓名: Jasone, 身份证号: 350423X, 性别: M, 出生日期:1992年3月5日 参考答案: #include class Date{ private: }; int getDay(){ } return day; int getMonth(){ } return month; int getYear(){ } return year; Date(Date &ad){//显式定义Date类的拷贝构造函数 } this->year = ad.year; this->day = ad.day; //等价于 year = ad.year //等价于 month = ad.month //等价于 day = ad.day this->month = ad.month; int year; int month; int day; Date(int y, int m=3, int d=5){ //带默认参数的构造函数 } this->year = y; this->month = m; this->day = d; //等价于 year = y; //等价于 month = m; //等价于 day = d; public: