首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么会这样?该怎么解决

2012-02-08 
为什么会这样?程序如下:#includeiostream#includestdlib.husingnamespacestdclassa{public:a(char*st

为什么会这样?
程序如下:
#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++对象模型”中有详细的介绍。。。
[解决办法]
你已经定义了默认构造函数,并且默认构造函数你还使用了默认参数。
[解决办法]
有了默认参数了,用了默认参数

热点排行