c++类对象,赋值与拷贝问题

good778899 2011-02-14 08:14:28
#include<iostream>
using namespace std;
//随便定义一个类
class A
{
public:
A():X1(0),X2(0){};
A(int a1,int a2)
{
X1=a1;
X2=a2;
}
private:
int X1;
int X2;
};
void main()
{
A a(10,10);
A b(a);

A c;
c=a;//两种红色的语句写法,有什么不同??
Sleep(10000);
}
...全文
288 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
direction917 2011-02-15
  • 打赏
  • 举报
回复
operator = 也可以初始化,学习了。是不是应该在重载函数内对对象进行初始化?
harleypang 2011-02-15
  • 打赏
  • 举报
回复
嗯,前面的大虾们都解释得很清楚了
华时纳 2011-02-14
  • 打赏
  • 举报
回复
赋值是调用operator=函数,而复制是用复制构造函数。构造函数只会在初始化时被自动调用。而赋值函数则只会在赋值时被调用,注意,初始化是在声明对象时就给它赋予初值,而赋值是在声明对象之后被手动调用的。对于一个对象,即便我们没有显示的初始化,也会调用默认的构造函数进行初始化。


与参考原文:http://www.xevc.com/深入解析c类对象的赋值复制与类型转换/ 这里面讲得比较仔细

pengzhixi 2011-02-14
  • 打赏
  • 举报
回复
A b(a);//调用拷贝构造函数

c=a;//调用operator=
赵文波 2011-02-14
  • 打赏
  • 举报
回复
例子:
class A
{
public:
int a;

A operator + (A& a)
{
A c;
c.a = this->a +a.a;
return c;
}
};
class B
{
public:
int b;
void operator = (A& a)
{
b = a.a;
}
};

void main()
{
A a,b,c,d;

B bb;

a.a =10;
b.a =20;
c.a = 30;

bb = c+b+a;

cout << bb.b << endl;
}
赵文波 2011-02-14
  • 打赏
  • 举报
回复
A b(a); 这是纯粹的做对象拷贝。

c=a; 其实这也是对象拷贝,最后的效果没什么不同只是写法上不一样。

“=”的真正价值在你对其进行重载后,才发挥出来。

比如:当你想写 c = a+b; 的时候,你必须重载“=”。
寂寞的泡面 2011-02-14
  • 打赏
  • 举报
回复
class A
{
public:
A():X1(0),X2(0){};
A(int a1,int a2)
{
X1=a1;
X2=a2;
}
private:
int X1;
int X2;
};
void main()
{
A a(10,10);
A b(a); // 调用拷贝构造函数 A::A(const A& instance);
A c;
c=a; // 调用赋值操作 A& A::operator=(const A& instance);
Sleep(10000);
}
楼主看注释。
liutengfeigo 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
前面是赋值构造函数,后面是operator=
[/Quote]
你可以在这2个函数里面写些cout。看看什么情况用了哪个。
昵称很不好取 2011-02-14
  • 打赏
  • 举报
回复
复制构造函数
昵称很不好取 2011-02-14
  • 打赏
  • 举报
回复
前面是赋值构造函数,后面是operator=

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧