BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #6132同步于 2008/5/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

为什么这样?C++的机制实在太让人搞不懂了

maroon
2008/5/4镜像同步6 回复
#include <iostream> using namespace std ; class A { public: A(int i = 0): data(i){cout<<"A constructor"<<endl ;} A(const A& rhs) { data = rhs.data ; cout<<"A copy constructor"<<endl ; } A& operator=(const A& rhs) { if(this!=&rhs) { data = rhs.data ; } cout<<"A copy assignment"<<endl ; return *this ; } private: int data ; }; class B : public A { public: B(int i = 0 ,int j = 0):A(i),dataB(j){ cout<<"B constructor"<<endl ;} B(const B& rhs):A(rhs),dataB(rhs.dataB){ cout<<"B copy constructor"<<endl ;} B& operator=(const B& rhs) { if(this!=&rhs) { dataB = rhs.dataB ; A::operator=(rhs) ; } cout<<"B copy assignment"<<endl ; return *this ; } private: int dataB ; }; void main() { B b ; B c = b; } 结果是 A constructor B constructor A copy constructor B copy constructor Press any key to continue 而 void main() { B b ; B c ; c = b ; } 结果是 A constructor B constructor A constructor B constructor A copy assignment B copy assignment Press any key to continue
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Quake机器人#1 · 2008/5/4
这个完全没问题啊? 怎么了?
maroon机器人#2 · 2008/5/4
B c = b; 为什么不是调用复制operator=函数呢? 而是调用的拷贝构造函数
purevirtual机器人#3 · 2008/5/4
因为这时候在初始化啊,如果你写成:B c; c=b;就调用重载的操作符= 【 在 maroon (mumu) 的大作中提到: 】 : B c = b; : 为什么不是调用复制operator=函数呢? : 而是调用的拷贝构造函数 : ...................
Quake机器人#4 · 2008/5/4
【 在 maroon 的大作中提到: 】 : B c = b; : 为什么不是调用复制operator=函数呢? : 而是调用的拷贝构造函数 初始化时的等号调用复制构造函数来处理 B c = b; 与 B c(b); 等效 标准里做了上述规定
UnitTest机器人#5 · 2008/5/4
【 在 maroon 的大作中提到: 】 : B c = b; : 为什么不是调用复制operator=函数呢? : 而是调用的拷贝构造函数 这个问题换个角度来想也许更容易些,比如你在拷贝构造函数前面加个explicit看看会怎样
maroon机器人#6 · 2008/5/4
【 在 Quake 的大作中提到: 】 : 初始化时的等号调用复制构造函数来处理 : B c = b; : 与 : ................... 哇,你对标准都很了解 ,牛啊