发布网友 发布时间:2024-10-18 20:05
共1个回答
热心网友 时间:2024-10-18 21:40
程序有些地方是错误的,详见注释
class A
{
public:
A(){printf("A()\n");}
virtual ~A(){printf("~A()\n");} //定义虚析构函数,一般不需要这样定义,虚析构函数一般在使用继承并使用new分配对象时才会使用到。
A(const A&a){printf("A(const A&a)\n");} //定义复制构造函数,当发生对象的复制时就会调用这个构造函数。至于什么地方是对象的复制这里不解释,因为那个不是一两句可以说清楚的。
A&operator=(const A&a) //重载赋值操作符=,对重载操作符,可以把操作符理解为函数的名字,而operator是一个关见字,那么这里的意思就是说对于=这个操作符来说,需要一个cont A&类型的参数,并且这个函数应反回一个A类型的对象的引用A &,当然也不一定非要反回A&,你可以对操作符函数反回任何类型,也可以是int型,当然那要对实际的使用有意义。
{printf("operator=\n");
A a1;
return a1; //应添加操作符函数的反回值。
}
}
int main(int argc, char *argv[])
{
A a; //创建类A的对象,因此会调用构造函数,输出A()
A b=a; //使用对象a来初始化对象b,这里会发生复制操作,因此会调用复制构造函数,结果输出A(const A&a)
A c; //创建对象c,会调用构造函数,输出A()
c=a; //调用重载的赋值操作符,输出operator=,在输出之后赋值操作符函数中创建了一个对象a1,因此会输出构造函数的内容A(),当函数结束时会调用构造函数,因此会输出~A()
} //程序结束,因为创建了三个对象c, b,a,因此会调用两次析构函数,输出三次~A()
输出结果:
A()
A(const A&a)
A()
operator=
A()
~A()
~A()
~A()
~A()
如果你还有不明白的地方,可以下载本人的文库中的文章
文章《C++构造函数,复制构造函数和析构函数专题》里面有对复制构造函数的详细讲解。
文章《C++操作符重载专题》里面有对操作符重载的详细讲解。
文章《C++继承,虚函数与多态性专题》文章的最后讲解了虚析构函数,以及在什么情况下才能用到,以及为什么要这样使用。