为什么会这样?
程序如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
class a{
public:
a(char *str= "aaaa " ){
cout < < "str= " < <str < <endl;
}
};
class b{
public:
b(){}
private:
a testa;
};
void main()
{
b testb;
system( "pause ");
}
显示结果:
str=aaaa
疑问:我没有写a类的默认构造函数,系统有默认,为什么生成a对象的时候没有去调用a的默认函数,而是调用了带参数的构造函数?
[解决办法]
我没有写a类的默认构造函数,系统有默认,为什么生成a对象的时候没有去调用a的默认函数,而是调用了带参数的构造函数?
==============
当有自定义的构造函数时候,
系统将不再自动生成任何构造函数。
[解决办法]
另外,纠正一个概念。
所谓的 默认构造函数,
不是 没有参数的构造函数,
而是会被 默认调用的构造函数。
无参构造函数 和 带参【但是所有参数都有默认参数的】构造函数,
都是 默认构造函数。
也就是这里已经定义了 a 的默认构造函数了。
[解决办法]
嗯, 在“深度探索c++对象模型”中有详细的介绍。。。
[解决办法]
你已经定义了默认构造函数,并且默认构造函数你还使用了默认参数。
[解决办法]
有了默认参数了,用了默认参数