有关阿里巴巴的一道笔试题C++的

heartgoon2010 2011-10-29 09:58:04
程序如下,为什么结果是:
A
B
~B
~A
~A
而不是:
A
A
B
~B
~A
~A
呢,求解答!!!
class A
{
public:
A(){cout<<"A"<<endl;}
~A(){cout<<"~A"<<endl;}
};

class B

{public:
B(A &a):_a(a){cout<<"B"<<endl;}
~B(){cout<<"~B"<<endl;}
private:
A _a;
};
int main()
{
A a; //调用A的构造函数输出A
B b(a); //为什么这里不先调用基类A的构造函数呢?????????????????
return 0;
}
...全文
3358 47 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjb_yd 2011-11-17
  • 打赏
  • 举报
回复
阿里巴巴的笔试题没这么2吧。。。
liutengfeigo 2011-11-16
  • 打赏
  • 举报
回复
inside c++ object
dic_008 2011-11-16
  • 打赏
  • 举报
回复
我们没有定义构造函数、复制构造函数、析构函数时编译器都为我们合成一个,

复制构造函数有一个本类类型对象的引用
B(A &a):_a(a){cout<<"B"<<endl;}
这句就有调用编译器合成的复制构造函数
长线策略家 2011-11-16
  • 打赏
  • 举报
回复
做对了,突然觉得生活又美好了一点~~
liuzhengxi2010 2011-11-04
  • 打赏
  • 举报
回复
good!!!
[Quote=引用 12 楼 qq120848369 的回复:]

C/C++ code
构造次序和析构次序是对称的,这种题解答都是有技巧的.

拷贝构造就不说了,构造过程是:

A A B ,那么析构必然是对称的:B A A。
[/Quote]
coolmacjing 2011-11-04
  • 打赏
  • 举报
回复
拷贝构造学得不好,我也来好好向大家学习。个人觉得这个解释比较合理。[Quote=引用 28 楼 mskmc_mc 的回复:]

A a; //调用A的构造函数输出A
B b(a); //为什么这里不先调用基类A的构造函数呢?????????????????

细看一下,B(A &a):_a(a) 中的A& a是一个引用,初始化_a(是个成员,不是基类) ,只是地址在赋值,就是之前的类对象A a的地址(它的构造之前已经调用过了,只是把地址给了B的成员_a),所以没有调用A的构造。
所以构造的阶段是……
[/Quote]
smallmuou 2011-11-03
  • 打赏
  • 举报
回复
又学习了拷贝构造
freefei 2011-11-03
  • 打赏
  • 举报
回复
拷贝构造函数,需要,
打个广告
软件开发技术讨论群
181245517
chrc1122 2011-11-03
  • 打赏
  • 举报
回复
看了第N+1遍了
路口转弯 2011-11-02
  • 打赏
  • 举报
回复
看不懂呀!!!
Kiven 2011-11-02
  • 打赏
  • 举报
回复
学习了,细节很重要
Crysis168 2011-11-02
  • 打赏
  • 举报
回复
呵呵,自己试了一下。看来这个是_a(a)这个会调用拷贝构造不会调用‘=’,刚才说错了,自己纠正。。。
Crysis168 2011-11-02
  • 打赏
  • 举报
回复
_a(a)这个东西产生的其实是重载‘=’的赋值操作拷贝函数(assignment operator = copy),这个函数由编译器自己生成在这道题的情况下属于bitwsie copy,也就是逐位次拷贝,效率是最高的。《Inside the c++ object model》一书里面有提到过。。
cp298674954 2011-11-01
  • 打赏
  • 举报
回复
阿里巴巴 这么容易?
「已注销」 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kangyuanxun 的回复:]
_a(a)调用的应该是复制构造函数
#include <iostream>
using namespace std;

class A
{
public:
A(){cout<<"A"<<endl;}
A(A &a){cout<<"&A"<<endl;}
~A(){cout<<"~A"<<endl;}
};

class B

{public:
B(A ……
[/Quote]

++
loveheronly 2011-11-01
  • 打赏
  • 举报
回复
B b(a);拷贝构造函数
lwlwwzc 2011-11-01
  • 打赏
  • 举报
回复
如果这种题目就是阿里巴巴的面试题,那阿里巴巴也太好进了
wjx_0_2001 2011-11-01
  • 打赏
  • 举报
回复
忘记了
wjx_0_2001 2011-11-01
  • 打赏
  • 举报
回复
析构 不先调用基类的析构吗?!
_Fight_Fight_ 2011-11-01
  • 打赏
  • 举报
回复
强!!
加载更多回复(22)

65,189

社区成员

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

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