读书人

构造函数有关问题

发布时间: 2012-02-07 17:45:36 作者: rapoo

构造函数问题,请指教!
#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;

};

为何???
高手解释下

[解决办法]
A()
{
cout < < "A() " < <endl;
A(5);这句你想干什么?呃,从java转过来的?竟然想直接调用其它构造函数。
};

用A():m_i(5){cout < < "A() " < <endl;};
[解决办法]
A(5); //这里只是生成了一个零时对象而以,根本没有对当前对象的m_i赋值
[解决办法]
A()
{
cout < < "A() " < <endl;
A(5);//这里并不是“调用A(int)函数”,而是“利用A(int)构造函数产生一个临时对象,等此条语句执行完毕再将此临时对象销毁”!楼主切忌,在C++中不可以像java一样“一个构造函数调用另一个构造函数”!!
};

读书人网 >C++

热点推荐