c++关于拷贝构造函数和等号的重载
#include<iostream>usingnamespacestd;classMyClass{public:MyClass(inti=0){cout<<i;}MyCl...
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int i = 0){ cout << i; }
MyClass(const MyClass &x) { cout << 2; }
MyClass operator=(const MyClass &x){
cout << 3;
return *this;
}
~MyClass(){
cout << 4;
}
};
int main(){
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3 = obj1;//****************************************************
return 0;
}
运行结果为 122444
也是就说(************************)行中的= 号并没有进行重载运行,这是问什么?
是不是说MyClass obj3 = obj1 等价于MyClass obj3(obj1)
假若MyClass obj3 = obj1;
改为MyClass obj3;
obj3 = obj1;是不是会不一样
c++渣渣求大虾指点 展开
using namespace std;
class MyClass
{
public:
MyClass(int i = 0){ cout << i; }
MyClass(const MyClass &x) { cout << 2; }
MyClass operator=(const MyClass &x){
cout << 3;
return *this;
}
~MyClass(){
cout << 4;
}
};
int main(){
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3 = obj1;//****************************************************
return 0;
}
运行结果为 122444
也是就说(************************)行中的= 号并没有进行重载运行,这是问什么?
是不是说MyClass obj3 = obj1 等价于MyClass obj3(obj1)
假若MyClass obj3 = obj1;
改为MyClass obj3;
obj3 = obj1;是不是会不一样
c++渣渣求大虾指点 展开
2个回答
展开全部
一个类的构造函数只有在定义该类的对象时候才会调用,而且每个对象只有一次调用构造函数的机会,MyClass obj3 = obj1,这个是在定义对象时候的赋值,所以调用的是copy构造函数。
MyClass obj3 = obj1 等价于MyClass obj3(obj1),这个判断应该是正确的。
MyClass obj3;
obj3 = obj1;这样就不是属于构造函数了。
你的构造函数只发生在定义一个对象的时候,定义完了以后再赋值,就是=号重载了。
MyClass obj3 = obj1 等价于MyClass obj3(obj1),这个判断应该是正确的。
MyClass obj3;
obj3 = obj1;这样就不是属于构造函数了。
你的构造函数只发生在定义一个对象的时候,定义完了以后再赋值,就是=号重载了。
展开全部
复制构造函数接受单个类类型引用形参,这个形参一般用const修饰。
class A
{ public:
A();;
A(const A&);
//.........
};
一般的类,编译器合成的构造函数就能完成必要的工作。担当类有一个数据成员是指针,或者成员表示在构造函数中分配的其他资源;在创建新对象时必须做一些特定工作。这两种情况必须定义复制构造函数。
复制操作符重载,由operator后面跟所定义的操作符符号,通过定义名为operator=函数来对赋值进行定义。该操作符函数有两个形参:第一个形参对应左边的操作数(隐式绑定到this指针了),第二个形参对应右操作数。返回类型应该与内置赋值运算返回的类型相同,内置类型的赋值运算返回对右操作数的引用,赋值操作符也返回对同一类型的引用。
class B
{
public:
B& operator=(const B &);
};
可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。
class A
{ public:
A();;
A(const A&);
//.........
};
一般的类,编译器合成的构造函数就能完成必要的工作。担当类有一个数据成员是指针,或者成员表示在构造函数中分配的其他资源;在创建新对象时必须做一些特定工作。这两种情况必须定义复制构造函数。
复制操作符重载,由operator后面跟所定义的操作符符号,通过定义名为operator=函数来对赋值进行定义。该操作符函数有两个形参:第一个形参对应左边的操作数(隐式绑定到this指针了),第二个形参对应右操作数。返回类型应该与内置赋值运算返回的类型相同,内置类型的赋值运算返回对右操作数的引用,赋值操作符也返回对同一类型的引用。
class B
{
public:
B& operator=(const B &);
};
可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询