当前位置:文档之家› C++实验三 构造函数和析构函数题目+答案

C++实验三 构造函数和析构函数题目+答案

实验三构造函数和析构函数班级:B135A2 学号: 201322688 姓名:杨弘成绩:一.实验目的1.理解构造函数和析构函数作用;2.掌握各种类型的构造函数和析构函数的使用;3.掌握构造函数和析构函数的调用顺序。

二.使用的设备和仪器计算机+Windows XP +Visual C++6.0三.实验内容及要求1.阅读程序,写出运行结果,然后上机运行,将机器运行结果与人工运行的结果进行比较,并对每一行输出做出分析。

(1)#include <iostream>using namespace std;class MyClass{public: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<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx){cout<<"执行一个参数构造函数:" ;x=xx;y=0;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx,int yy){cout<<"执行两个参数构造函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(MyClass &a){cout<<"执行复制构造函数:" ;x=a.x;y=a.y;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Display(){cout<<"执行显示函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Set(int xx=0,int yy=0){cout<<"执行设置函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: ~MyClass (){cout<<"执行析构函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void main(){MyClass a(12,34);a.Set(20);a.Display();MyClass b(a);b.Display();MyClass c;MyClass d(222);{MyClass e(788,453);d.Display();}c.Display();}(2)#include<iostream>using namespace std;class A{public:A(int x=100,double y=1.2){a=x;b=y;}void show(char *pt){ cout<<pt<<":"<<endl;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;}private:int a;double b;};void main(){A obj1,obj2(100,3.5);obj1.show("obj1");obj2.show("obj2");A *p;p=&obj1;p->show("p->obj1");(*p).show("(*p)obj1");p=&obj2;p->show("p->obj2");(*p).show("(*p)obj2");p=new A;p->show("p->new");delete p;}(3)#include <iostream>using namespace std;class Complex{public:Complex();Complex (double x, double y);Complex (Complex & c);~ Complex ();double GetRel() { return rel;}double GetImg() { return img;}private:double rel, img;};Complex::Complex(){rel=0; img=0;cout<<"缺省构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::Complex(double x, double y){rel=x; img=y;cout<<"构造函数被调用: ("<<rel<<","<<img<<")"<<endl; }Complex::Complex(Complex & c){rel = c.rel;img = c.img;cout<<"复制构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::~ Complex (){cout<<"析构函数被调用: ("<<rel<<","<<img<<")"<<endl; }//函数定义Complex fun(Complex c){cout<<"在函数fun()中."<<endl;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<<"c2=("<<c2.GetRel()<<",";cout<<c2.GetImg()<<")"<<endl;}2.在实验二第2题中使用构造函数和对象数组,完成多个歌手的报名、显示、查询和修改等功能。

3.定义数组类,并定义该类对象实现各种操作。

➢数组的属性:长度、元素➢数组基本操作:添加、查询、删除、排序、插入功能。

➢参考的程序框架:const int MaxSize=10;class Array_int{private:int length;int data[MaxSize];public:Array_int();//相当于初始化操作,一个空数组,长度为0Array_int(int a[],int n);//用给定的长度为n的数组a初始化数据成员void Display();//显示所有数组元素void Insert(int x);//将给定的元素x插入到数组中后,仍保持数组的有序性;需要判断插入新元素会不会发生存储空间的溢出情况,若发生溢出提示插入操作失败;插入过程中,插入位置确定后,从插入位置至最后一个元素全部往后移一位,给新插入元素空出插入位置。

void Delete(int x);//从数组中删除指定元素x,后面的元素全部要往前移一位;做删除前需要判断数组是否为空,若为空表,则删除操作失败int Search(int x);//从数组中查找指定元素x,若查找成功返回元素在数组中位置,查找失败返回特定值-1};四.实验步骤编写程序+编译+连接+运行+分析结果/*2.在实验二第2题中使用构造函数和对象数组,完成多个歌手的报名、显示、查询和修改等功能。

*//*定义一个中国好声音歌手类。

其中包括每个歌手的名字、年龄、来自哪个省份、所唱的曲目等。

可以实现报名、显示、修改等功能。

*/#include<iostream>#include<string>#include<iomanip>#include<stdlib.h>#define N 3using namespace std;class Singer{private:string Name;int Age;string Province;string Song;public:Singer(){cout<<"调用Singer构造函数。

"<<endl;}~Singer(){cout<<"调用Singer析构函数。

相关主题