实验三、构造函数和析构函数
一、实验目的
1.掌握声明类的方法,类和类的成员的概念以及定义对象的方法。 2.初步掌握用类和对象编制基于对象的程序。 3.学习检查和调试基于对象的程序。
4.掌握类的构造函数和析构函数的概念和使用方法。 5.掌握对象数组、对象的指针及其使用方法。
二、实验内容
1.检查下面的程序,找出其中的错误,并改正之。然后上机调试,使之能正常运行。 (1)
#include
A(int i=0){m=i;} //构造函数不要返回类型名 void show(){cout< ~A(){} //析构函数不要返回类型名 private: int m; }; int main(){ A a(5); a.show(); a.set(10); a.show(); return 0; } //结果: //5 //10 (2) #include class X { private: int a=0;//私有成员不允许赋初值 int &b; const int c; void setA(int i){a=i;} X(int i){ a=i;} public: int X(){ a=b=0;}//构造函数无返回值 X(int i, int j, int k){ a=i; b=j; c=k; } setC(int k) const { c=c+k;}//成员函数没有标明返回值类型. }; int main() { X x1; X x2(2) ;//私有成员函数不可被外界访问. X x3(1,2,3) ; x1.setA(3) ;//私有成员函数不可被外界访问. return 0 ; } 改正后的程序: #include void setA(int i){a=i;} X(int i){ a=i;} public: X(){ a=b=0;} X(int i, int j, int k) { a=i; b=j; c=k; } void setC(int k) { c=c+k;} }; int main() { X x1; X x3(1,2,3); return 0; } 2.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。 (1) #include test::test( ) { cout << \ num=0;fl=0.0; } test::~test( ) { cout << \} int main( ) { test array[2]; cout << array[1].getint( )<< \ \ return 0; } //结果: //Initalizing default //Initalizing default //0 0 //Destructor is active //Destructor is active (2) #include {public: X(int x1,char *x2,float x3):a(x1),c(x3) { b=new char[sizeof(x2)+1]; strcpy(b,x2); } X():a(0),b(\ X(int x1,char *x2=\ X(const X&other) { a=other.a; b=\ c=other.c; } void print() { cout<<\ } private : int a; char *b; float c; }; int main(){ X *A=new X(4,\ X B,C(10),D(B); A->print(); B.print(); C.print(); D.print(); return 0; } 结果; //a=4 b=X::X(int,char,float) c=32 //a=0 b=X::X() c=10 //a=10 b=X::X(….) c=10 //a=0 b=X::X(const X &other) c=10 3.在实验二第2题工资管理类Salary中定义构造函数初始化工资数据的各分项数据。该类的形式如下: class Salary {public: Salary(){初始化工资数据的各分项数据为0} Salary(……) {初始化工资数据的各分项数据} void setXX(double f){ XX=f; } double getXX(){ return XX; } double RealSalary(){ …… }//计算实发工资 …… Private: Bouble Wage, Subsidy, Rent, WaterFee, ElecFee; }; 其中,成员函数setXX()用于设置工资的各分项数据,成员函数getXX()用于获取工资的各分项数据,XX代表Wage、Subsidy等数据成员,如Wage对应的成员函数则为setWage()和 getWage()。 实发工资=Wage+Subsidy-Rent-WaterFee-ElecFee 编程完善该类的设计,并在主函数中测试该类的各成员函数。 // 编程完善该类的设计,并在主函数中测试该类的各成员函数。 #include cout<<\最后实发的工资是:\ cout<<(wage+subsidy-rent-waterfee-elecfee)< private: double wage; double subsidy; double rent; double waterfee; double elecfee;