构造函数有关问题,
构造函数问题,请指教!
#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一样“一个构造函数调用另一个构造函数”!!
};
#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一样“一个构造函数调用另一个构造函数”!!
};