实验三 构造函数和析构函数 参考答案
班级: 学号: 姓名: 成绩:
一. 实验目的
1.理解构造函数和析构函数作用;
2.掌握各种类型的构造函数和析构函数的使用; 3.掌握构造函数和析构函数的调用顺序。
二. 使用的设备和仪器
计算机+Windows XP +Visual C++6.0
三. 实验内容及要求
1.阅读程序,写出运行结果,然后上机运行,将得到的运行结果与前面的结果进行比较。最后要求对每一行输出进行分析。 (1)
#include
MyClass(); MyClass(int xx); MyClass(int xx,int yy); MyClass(MyClass &); void Display(); void Set(int, int); ~ MyClass(); private: int x,y; };
MyClass:: MyClass() {
cout<<\执行无参构造函数:\; x=0;y=0;
cout<<\}
MyClass:: MyClass(int xx) {
cout<<\执行一个参数构造函数:\; x=xx;y=0;
cout<<\}
MyClass:: MyClass(int xx,int yy) {
cout<<\执行两个参数构造函数:\; x=xx;y=yy;
cout<<\}
MyClass:: MyClass(MyClass &a) {
cout<<\执行复制构造函数:\; x=a.x;y=a.y;
cout<<\}
void MyClass:: Display() {
cout<<\执行显示函数:\; cout<<\}
void MyClass:: Set(int xx=0,int yy=0) {
cout<<\执行设置函数:\; x=xx;y=yy;
cout<<\}
MyClass:: ~MyClass () {
cout<<\执行析构函数:\; cout<<\}
void main() {
MyClass a(12,34); a.Set(20); a.Display(); MyClass b(a); b.Display(); MyClass c; {
MyClass e(788,453); d.Display();
MyClass d(222);
}
}
c.Display();
运行结果:
执行两个参数构造函数:x=12y=34 //主函数第一行,定义对象a,调用带两个参数的构造函数 执行设置函数:x=20y=0 //主函数第二行,通过对象a调用成员函数Set(int, int) 执行显示函数:x=20y=0 //主函数第三行,通过对象a调用成员函数Display()
执行复制构造函数:x=20y=0 //主函数第四行,用已有对象a初始化对象b,调用复制构造函数 执行显示函数:x=20y=0 //主函数第五行,通过对象a调用成员函数Display() 执行无参构造函数:x=0y=0 //主函数第六行,定义对象c,调用不带参数的构造函数
执行一个参数构造函数:x=222y=0 //主函数第七行,定义对象d,调用带一个参数的构造函数 执行两个参数构造函数:x=788y=453 //主函数第九行,定义对象e,调用带两个参数的构造函
数
执行显示函数:x=222y=0 //主函数第十行,通过对象d调用成员函数Display() 执行析构函数:x=788y=453 //主函数第十一行,撤销对象e,调用析构函数 执行显示函数:x=0y=0 //主函数第十二行,通过对象c调用成员函数Display() 执行析构函数:x=222y=0 //主函数结束,撤销对象d,调用析构函数 执行析构函数:x=0y=0 //主函数结束,撤销对象c,调用析构函数 执行析构函数:x=20y=0 //主函数结束,撤销对象b,调用析构函数 执行析构函数:x=20y=0 //主函数结束,撤销对象a,调用析构函数 Press any key to continue
(2)
#include
A(int x=100,double y=1.2){a=x;b=y;} void show(char *pt) { } private: int a; double b; }; void main() {
A obj1,obj2(100,3.5); obj1.show(\ obj2.show(\
cout< A *p; p=&obj1; p->show(\ (*p).show(\ p=&obj2; p->show(\ (*p).show(\ p=new A; p->show(\ delete p; } 运行结果: obj1: //主函数第二行通过对象obj1调用成员函数show() a=100 b=1.2 obj2: //主函数第三行通过对象obj2调用成员函数show() a=100 b=3.5 p->obj1: //主函数第六行通过指向对象的指针p调用成员函数show(),p指向对象obj1 a=100 b=1.2 (*p)obj1: //主函数第七行通过指向对象的指针p调用成员函数show(),p指向对象obj1 a=100 b=1.2 p->obj2: //主函数第九行通过指向对象的指针p调用成员函数show(),p指向对象obj2 a=100 b=3.5 (*p)obj2: //主函数第十行通过指向对象的指针p调用成员函数show(),p指向对象obj2 a=100 b=3.5 p->new: //主函数第十二行通过动态创建的对象指针p调用成员函数show() a=100 b=1.2 Press any key to continue (3) #include Complex(); Complex (double x, double y); Complex (Complex & c); }; Complex::Complex() { } Complex::Complex(double x, double y) { } Complex::Complex(Complex & c) { } Complex::~ Complex () { cout<<\析构函数被调用: (\} //函数定义 Complex fun(Complex c) { cout<<\在函数 fun()中.\ double x, y; x=c.GetRel()*10; y=c.GetImg()+100; Complex temp(x, y); return temp; } void main() { Complex c1(6.8, 98.23),c2; c2=fun(c1); cout<<\cout< rel = c.rel; img = c.img; cout<<\复制构造函数被调用: \cout<<\ rel=x; img=y; cout<<\构造函数被调用: (\ rel=0; img=0; cout<<\缺省构造函数被调用: \ cout<<\~ Complex (); double GetRel() { return rel;} double GetImg() { return img;} double rel, img; private: