c++的构造函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 16:25:55
#include <iostream.h>
class point
{
int x;
public:
point(int x)
{

cout<<"调用构造函数\n";
}
point(point &p)
{

cout<<"调用拷贝构造函数\n";
}

};
void main()
{
point a1=50;
point a2=a1;
a2=a1;
}
请问在定义一个对象时,用另一个对象去初始化定义的对象,是不是去调用构造函数???还有a2=a1是调用构造函数还是拷贝构造函数??

因为a2=a1;这里使用了“等号运算符”,不是构造函数,类有一个默认的等号运算符,可以制造一个类的浅拷贝

-----------------------------

a2=a1既不是“构造函数”也不是“拷贝构造函数”,是“等号运算符”

你想要解决什么?说的具体些。

你想要说什么?我就看到代码,没看到你的问题

答案是

调用构造函数
调用拷贝构造函数

point a1=50,调用的是构造函数

point a2=a1 调用的是拷贝构造函数

a2=a1 调用的是等号重载,你没写,所以调用默认等号重载

至于问什么a2=a1调用的两次不一样,是因为a2刚出生时需要被构造,而构造它的是一个对象,所以调用拷贝构造

而它出生完毕以后不可以再出生一次,就像一个人不能出生两次一样,
所以到这里是别人给它赋值,所以要调用的是
等号重载,你自己不写等号重载的话,系统会调用默认的等号重载

如果您不相信,可以自己再写个等号重载试试

解答完毕,,呵呵,我以前也遇到类似问题