构造函数问题,请指教!

xgbing
博客专家认证
2007-01-16 04:33:29
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

class A
{
public:

A()
{
cout<<"A()"<<endl;
A(5);
};


A(int val)
{
cout<<"A(int)"<<endl;
m_i=val;
};

void Print()
{
cout<<m_i<<endl;
};

private:
int m_i;

};


class B
{
public:

B():m_a()
{
cout<<"B()"<<endl;
};

void Print()
{
m_a.Print();
}

public:
A m_a;


};


int _tmain(int argc, _TCHAR* argv[])
{
A a1;
a1.Print();

B b1;
b1.m_a.Print();
b1.Print();


getch();

return 0;
}

结果是
A()
A(int)
-858993460
A()
A(int)
B()
-858993460
-858993460

按输出显示初始化a1和b1都执行了A(),然后又执行了A(5),为何结果却不对!

而将类A改为这样却是对的:
class A
{
public:

//A()
//{
// cout<<"A()"<<endl;
// A(5);
//};


A(int val=5)
{
cout<<"A(int)"<<endl;
m_i=val;
};

void Print()
{
cout<<m_i<<endl;
};

private:
int m_i;

};

为何???
高手解释下
...全文
186 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2007-01-16
  • 打赏
  • 举报
回复
A()
{
cout<<"A()"<<endl;
A(5);//这里并不是“调用A(int)函数”,而是“利用A(int)构造函数产生一个临时对象,等此条语句执行完毕再将此临时对象销毁”!楼主切忌,在C++中不可以像java一样“一个构造函数调用另一个构造函数”!!
};
DonaldKnuth 2007-01-16
  • 打赏
  • 举报
回复
A(5); //这里只是生成了一个零时对象而以,根本没有对当前对象的m_i赋值
taodm 2007-01-16
  • 打赏
  • 举报
回复
A()
{
cout<<"A()"<<endl;
A(5);这句你想干什么?呃,从java转过来的?竟然想直接调用其它构造函数。
};

用A():m_i(5){cout<<"A()"<<endl;};

64,646

社区成员

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

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