C++构造问题

user_csc 2009-02-06 09:36:25

第一题:

#include "iostream.h"
class B
{
public:
B()
{
cout << "construct B() \n";
}
B(int )
{
cout << "construct B(int ) \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
class A
{
public:
B b; //这里为什么不能调用construct B() ;
A()
{
cout << "construct A() \n";
}
A(B b, int ) : b (2)
{
cout << "construct A(B b ,int) \n";
}
~A()
{
cout <<"deconstruct A \n";
}
};
void main()
{
B b;
A a(b, 5);
}
construct B()
construct B(int )
construct A(B b ,int)
deconstruct B //? 怎么来的
deconstruct A
deconstruct B
deconstruct B
Press any key to continue



第二题

#include "iostream.h"
class B
{
public:
B()
{
cout << "construct B() \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
class A
{
public:
B c; //这里为什么调用construct B() ;和上面的例子有什么不同???
A()
{
cout << "construct A() \n";
}
A(B b, int )
{
cout << "construct A(B b ,int) \n";
}
~A()
{
cout <<"deconstruct A \n";
}
};
void main()
{
B b;
A a(b, 5);
}
...全文
110 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
user_csc 2009-02-06
  • 打赏
  • 举报
回复
貌似只有2楼给了解释是有复制构造函数, 但还是有点不明白 。期待中。。。。
lbjfeng 2009-02-06
  • 打赏
  • 举报
回复

#include "iostream.h"
class B
{
public:
B()
{
cout << "construct B() \n";
}
B(int )
{
cout << "construct B(int ) \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
class A
{
public:
B b; //这里为什么不能调用construct B() ;
A()
{
cout << "construct A() \n";
}
A(B b, int ) : b (2)//这里因为是对象最为函数参数,其实要调用一次赋值构造函数
{
cout << "construct A(B b ,int) \n";
}
~A()
{
cout <<"deconstruct A \n";
}
};
void main()
{
B b;
A a(b, 5);
}


construct B()
construct B(int )
construct A(B b ,int)
deconstruct B //? 这个 就是对于因为作为参数,这个临时对象,局部变量都一次析构
deconstruct A
deconstruct B
deconstruct B

而下面都跟这个其实并没有什么严格意义都不同。A(B b, int ) : b (2)初始化列表很多用于是继承。但是很明显这里,因为构造的无法多态,所以,运行结果只是:
construct B()
construct B()
construct A(B b ,int)
deconstruct B
deconstruct A
deconstruct B
deconstruct B
yang1216 2009-02-06
  • 打赏
  • 举报
回复
3L是我弄错了。
第一题先是B b调用构造函数B(). 然后调用复制构造函数构造参数,然后才是b(2)调用B(int),然后是A的构造函数,析构时反过来。
wangsiyuanoo 2009-02-06
  • 打赏
  • 举报
回复
第二题:B c; //定义了一个B类的对象,当然要经过B的构造函数了
xxweilw 2009-02-06
  • 打赏
  • 举报
回复
第一题:

C/C++ code
#include "iostream.h"
class B
{
public:
B()
{
cout << "construct B() \n";
}
B(int )
{
cout << "construct B(int ) \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
class A
{
public:
B b; //这里为什么不能调用construct B() ;
A()
{
cout << "construct A() \n";
}
A(B b, int ) : b (2)//你在这里初始化B的第二构造函数,所以调用不到construct B()
{
cout << "construct A(B b ,int) \n";
}//退出这里时释放b 出来的deconstruct B //? 怎么来的
~A()
{
cout <<"deconstruct A \n";
}
};
void main()
{
B b;
A a(b, 5);
}
construct B()
construct B(int )
construct A(B b ,int)
deconstruct B //? 怎么来的
deconstruct A
deconstruct B
deconstruct B
Press any key to continue





第二题

C/C++ code
#include "iostream.h"
class B
{
public:
B()
{
cout << "construct B() \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
class A
{
public:
B c; //这里为什么调用construct B() ;和上面的例子有什么不同???
A()
{
cout << "construct A() \n";
}
A(B b, int )//就是这里没有没有调用c的缘故
{
cout << "construct A(B b ,int) \n";
}
~A()
{
cout <<"deconstruct A \n";
}
};
void main()
{
B b;
A a(b, 5);
}


wangsiyuanoo 2009-02-06
  • 打赏
  • 举报
回复
deconstruct B //对应 construct A(B b ,int) 中的 B b
deconstruct A //对应 construct A(B b ,int)
deconstruct B //对应 construct B(int )
deconstruct B //对应 construct B()
yang1216 2009-02-06
  • 打赏
  • 举报
回复
第一题得到的答案和你不一样啊,VS2005得到
construct B()
construct B(int )
construct A(B b ,int)
deconstruct B
ltc_mouse 2009-02-06
  • 打赏
  • 举报
回复
把类B修改一下,lz应该就明白了

class B
{
public:
B()
{
cout << "construct B() \n";
}
B( B& )
{
cout << "construct B(B&) \n";
}
B(int )
{
cout << "construct B(int ) \n";
}
~B()
{
cout <<"deconstruct B \n";
}
};
sincor 2009-02-06
  • 打赏
  • 举报
回复
老大 你以后得把你要问的问题写出来 就一点程序 怎么理解

64,636

社区成员

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

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