c++基础问题

zhangyu21101213 2008-12-15 07:52:55
class A
{
......

}


class B:public A
{
.......
}


问题一:
在派生情况下,我知道了 当复制B对象时(B X2 = X1)
(1)当派生类B没有提供显示复制构造函数时,会调用缺省的复制构造函数,并且在调用派生类的缺省复制构造函数之前,
会自动调用其基类的复制构造函数(可能是显示的或缺省的)
(2)那么在派生类B提供了显示的复制构造函数 但没有在构造函数的初始化列表中给出基类的构造函数调用时,会自动调
用基础类的构造函数吗?是哪个基类构造函数(缺省构造函数还是缺省复制构造函数)?

问题二:
在派生情况下,当B对象互相赋值时(X2 = X1)
(1)当派生类B没有提供显示拷贝赋值操作符=时,会调用缺省的拷贝赋值操作符=,那么在这种缺省的情况下,
在执行它之前 会自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)?
(2)当派生类B提供了显示拷贝赋值操作符=时,那么会在执行前 自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)
还是在派生类显示拷贝赋值操作符=中必须显示地调用基类的拷贝赋值操作符?


因为我现在不方便调试,所以请各位,直接给我理论性的答案,如果有什么理解不对的地方,请给我指出!谢谢!
...全文
157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
condor888 2008-12-16
  • 打赏
  • 举报
回复
还没到这些内容
zhangyu21101213 2008-12-16
  • 打赏
  • 举报
回复
UP
zhangyu21101213 2008-12-16
  • 打赏
  • 举报
回复
来人看看啊!
pony_ml 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangyu21101213 的回复:]
复制类对象的时候为什么你说不是调用拷贝构造函数?
但是 B X2 = X1; 等价于 B X2(X1);这难道不是拷贝构造函数的调用吗?
[/Quote]

B X2 = X1
这句不是赋值,是定义的同时初始化。

B X2;
X2 = X1; // 这里才是赋值
不同
zhangyu21101213 2008-12-16
  • 打赏
  • 举报
回复
复制类对象的时候为什么你说不是调用拷贝构造函数?
但是 B X2 = X1; 等价于 B X2(X1);这难道不是拷贝构造函数的调用吗?
fqblog 2008-12-16
  • 打赏
  • 举报
回复
程序员联盟群: (73204313)

主要讨论:c/c++,开源技术,linux,window等.
欢迎编程爱好者加入... ...
就呆在云上 2008-12-16
  • 打赏
  • 举报
回复
那么在派生类B提供了显示的复制构造函数 但没有在构造函数的初始化列表中给出基类的构造函数调用时,会自动调
用基础类的构造函数吗?是哪个基类构造函数(缺省构造函数还是缺省复制构造函数)?

会,而且是基类的缺省复制构造函数


在派生情况下,当B对象互相赋值时(X2 = X1)
(1)当派生类B没有提供显示拷贝赋值操作符=时,会调用缺省的拷贝赋值操作符=,那么在这种缺省的情况下,
在执行它之前 会自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)?
(2)当派生类B提供了显示拷贝赋值操作符=时,那么会在执行前 自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)
还是在派生类显示拷贝赋值操作符=中必须显示地调用基类的拷贝赋值操作符?


看看effective c++吧
说的很清楚了,条款16!
SearchLife 2008-12-15
  • 打赏
  • 举报
回复
mark
xtting_8984313 2008-12-15
  • 打赏
  • 举报
回复
同意ls,没有new,所以是assignment operator,不是ctor
nullah 2008-12-15
  • 打赏
  • 举报
回复

问题一:
在派生情况下,我知道了 当复制B对象时(B X2 = X1)
(1)当派生类B没有提供显示复制构造函数时,会调用缺省的复制构造函数,并且在调用派生类的缺省复制构造函数之前,
会自动调用其基类的复制构造函数(可能是显示的或缺省的)
//复制B对象时(B X2 = X1)不调用拷贝构造函数 调用操作符= 所以下面的2问就无从谈起
//如果是显式的 你在派生类的初始化列表中要显式调用
(2)那么在派生类B提供了显示的复制构造函数 但没有在构造函数的初始化列表中给出基类的构造函数调用时,会自动调
用基础类的构造函数吗?是哪个基类构造函数(缺省构造函数还是缺省复制构造函数)?
//拷贝构造函数也是要显式调用基类的构造函数 若基类有默认构造函数则不用

问题二:
在派生情况下,当B对象互相赋值时(X2 = X1)
(1)当派生类B没有提供显示拷贝赋值操作符=时,会调用缺省的拷贝赋值操作符=,那么在这种缺省的情况下,
在执行它之前 会自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)?
(2)当派生类B提供了显示拷贝赋值操作符=时,那么会在执行前 自动调用基类的拷贝赋值操作符=吗(可能是显示的或缺省的)
还是在派生类显示拷贝赋值操作符=中必须显示地调用基类的拷贝赋值操作符?

具体看程序吧
#include <iostream>
using namespace std;

class a
{
public:
a(int a)
{
data = a;
cout << "a(int a)" << endl;
}
private:
int data;
};

class b:public a
{
public:
b(int b):a(b)
{
data2 = b;
cout << "b(int b)" << endl;
}
b(const b ©):a(2)
{
data2 = copy.data2;
cout << "b(const b ©)" << endl;
}
private:
int data2;
};

int main()
{
b classB(10);
b classBB(classB);//调用拷贝构造函数
b classBBB = classBB;//被编译器优化了 调用了拷贝构造函数
classB = classBB;//调用了赋值操作符

return 0;
}
zhangyu21101213 2008-12-15
  • 打赏
  • 举报
回复
各位来看看啊!

64,654

社区成员

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

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