C语言拷贝函数,析构函数的调用


会调用拷贝函数的三种情况

(1)使用对象1给对象2初始化

(2)将对象作为函数参数

(3)将对象作为函数返回值输出

书本上的描述:

(1)用同类型的另一个对象来初始化某对象

(2)给对象制作拷贝,并将其当做参数传给某函数

(3)给对象制作拷贝,并将其当做函数返回值,返回给调用方

笔试题1:

#include
using namespace std;
class Line
{
public:
int getLength(void);
Line(int Len);//有参构造
Line(const Line &obj);//构造函数
~Line();
private:
int *ptr;
};

Line::Line(int len)
{
//构造函数
cout<<"执行有参构造"< ptr=new int;
*ptr=len;
}
Line::~Line(void)
{
//析构函数
cout<<"析构"< static num=0;
delete ptr;
num++;
cout<<"析构被执行的次数:"<}
int Line::getLength(void)
{
return *ptr;//指针指向的地址上的值
}
//对象作为参数 也会调用拷贝函数
void display(Line obj)
{
cout<<"Length of line:"<}
//拷贝构造函数
Line::Line(const Line &obj)
{
cout<<"拷贝构造函数"< ptr=new int;
*ptr=*obj.ptr;
}
int main()
{

Line line1(10);//打印执行构造
Line line2=line1;
display(line1);
display(line2);
return 0;
}

请写出打印出的内容

Line line(10);//执行一次构造函数

Line line2=line1;//line2没有执行无参,默认构造函数,直接执行了拷贝构造

display(line1);//对象作为参数传入函数,执行拷贝构造,执行display(),然后执行析构函数

display(line2);//与display(line1)一样,执行拷贝构造,执行display(),然后执行过析构函数

return 0;//调用line1,line2两个对象析构

相关