c++何时需要重载运算符=

biaoyiddd 2013-08-03 03:53:01
没有重载=,可是在程序你定义 类A,B;A=B为什么还是可以?
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
net_assassin 2013-08-05
  • 打赏
  • 举报
回复
编译器给你加的默认的 赋值操作符重载
大尾巴猫 2013-08-03
  • 打赏
  • 举报
回复
引用 5 楼 biaoyiddd 的回复:
为何当你对象中用了指针,而且给指针动态分配了内存的情况下,需要写拷贝构造函数和赋值重载?
你要复制一个字符串,是如何做的?也是直接=吗? 正确的是new一下,然后strcpy。 如果类对象中用指针,拷贝构造和赋值重载做的同样是new和strcpy的工作。 在你提供的程序中,Complex 用默认的=就可以了。
max_min_ 2013-08-03
  • 打赏
  • 举报
回复


没有重载运算符 =正常运行,
是因为系统提供了默认的拷贝构造函数而已!


biaoyiddd 2013-08-03
  • 打赏
  • 举报
回复
引用 3 楼 ananluowei 的回复:
你没有重载=,系统会自动给你加个默认的。 当你对象中用了指针,而且给指针动态分配了内存的情况下,需要写拷贝构造函数和赋值重载。
为何当你对象中用了指针,而且给指针动态分配了内存的情况下,需要写拷贝构造函数和赋值重载?
qzf362269994 2013-08-03
  • 打赏
  • 举报
回复
你这是相同类型的赋值啊,调用了编译器默认提供的拷贝构造函数啊
大尾巴猫 2013-08-03
  • 打赏
  • 举报
回复
你没有重载=,系统会自动给你加个默认的。 当你对象中用了指针,而且给指针动态分配了内存的情况下,需要写拷贝构造函数和赋值重载。
biaoyiddd 2013-08-03
  • 打赏
  • 举报
回复
引用 1 楼 qzf362269994 的回复:
把完整代码发上来看看
可能B是A的子类吧,或者A类没有explict申明构造函数,B类可能可以发生隐式转换

//Complex.h
#include <iostream>
using namespace std;
class Complex
{
friend ostream& operator<<(ostream& o,const Complex& curr);
private:
int real;
int img;
public:
Complex():real(0),img(0){}
Complex(int m,int n):real(m),img(n){}
Complex& operator+(const Complex& rhs);
Complex& operator-(const Complex& rhs);

};

Complex& Complex::operator+(const Complex& rhs)
{
Complex c(this->real+rhs.real,this->real+rhs.img);
return c;

}

ostream& operator<<(ostream& o,const Complex& curr)
{

o<<curr.real<<"+"<<curr.img<<"i"<<endl;
return o;
}


//Complex.cpp
#include <iostream>
#include "Complex.h"
void main()
{
Complex a(1,1),b(2,2),c;
c=a+b;
cout<<c<<endl;
Complex d=c;
cout<<d<<endl;
}
qzf362269994 2013-08-03
  • 打赏
  • 举报
回复
把完整代码发上来看看 可能B是A的子类吧,或者A类没有explict申明构造函数,B类可能可以发生隐式转换

64,652

社区成员

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

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