题目 2、构造函数、拷贝构造函数
任务
(1)调试下列程序
源程序代码:
#include
using namespace std;
class Topint
{
public:
Topint(int x,int y) { X=x;Y=y;}
Topint(Topint &p);
~Topint () { cout<<"destructor is called \n";}
int getx() { return X;}
int gety() { return Y;}
private :
int X,Y;
};
Topint::Topint(Topint &p)
{
X=p.X; Y=p.Y;
cout<<"Copy -initialization Cnstructor is called\n";
Topint p1(4,9);
Topint p2(p1);
Topint p3=p2;
cout<<"p3=("<第 一 个 Constructor is Called 是 构 造 p1 时 产 生 的 , 两 个 Copy-initialization
Constructor is Called 分别 hi 构造 p2 和 p3 时 产生的。析构 p3、p2、p1,是产
生了三个 destructor is called。
(2)对上述程序在主函数中添加下列说明语句:Topint p4,p5(2)调试程序会
出现什么现象,为什么?如何解决?结合运行结果分析如何使用不同的构造函数
创建把不同的对象?对程序的输出结果进行分析和说明。
会出现对象 p4,p5 无法构造。在类中将构造函数 Topint(int x,int y);改
成带有默认参数的构造函数,例如:Topint(int x=0,int y =0);
运行结果:
分析同上。
题目 3、析构函数、new 和 delete 运算符
任务
定义字符串类,包括私有数据成员(char *ch),构造函数中用 new 为 ch 申
请空间,析构函数用 delete 释放空间,并验证构造函数和析构函数的调用书顺序。
源程序代码:
#include
using namespace std;
class String
{
private :
char *ch;int n;
public :
用!"<n=n; ch=new char[n]; cout<<" 构 造 函 数 被 调
void set() { cout<<"请输入"<>ch[i];
}
void show() {
cout<<"字符串的储存的内容如下:"<>n1>>n2;
String s1(n1),s2(n2);
s1.set();s2.set();
s1.show();s2.show();
}
运行结果:
可以看出构造函数和析构函数的调用的顺序相反!
注意:特别重视构造函数、拷贝构造函数和析构函数的使用以及调用顺序,
这在整个面向对象程序设计中一直是重点同时也一直是难点。
实验四、静态成员与友元
题目 1、静态成员的特性
任务
(1)调试下列程序,写出输出的结果,并分析输出结果。
程序代码:
#include
using namespace std;
class My
{
public :
My(int aa) {A=aa;B-=aa;}
static void fun(My m);