C++:默认构造函数

来源:百度知道 编辑:UC知道 时间:2024/06/19 07:47:28
class A{
public:
int unit_sold ;
double price ;
string isbn ;

} ;

在main(){ A a ;} 以后啊,为什么price和unit_sold没有像预期那样被 默认构造函数初始化为 0.0和0?
C++ primer一句话:
内置类型成员的初值依赖于对象如何定义.
如果对象在全局作用域中定义(即不在任何函数中)或定义为静态局部对象,则这些成员将被初始化为0.如果对象在局部作用域中定义,则这些成员没有初始化.

它的意思是说unit_sold和price应该初始化为0啊.

因为 int double 是基本数据类型,没有默认构造函数,要在A的构造函数里初始化
class A{
public:
A(){unit_sold = 0; price = 0.0;}
public:
int unit_sold ;
double price ;
string isbn ;

} ;

补充:正如你所说的一样,你在main函数内定义的a数据局部作用域
A a;
int main()
{
cout<<a.price<<endl;
return 0;
}
这样就对了

谁教你的默认值一定是0和0.0啊,应该是一些垃圾值才对。

实际上根本还没有初始化。。。随机值

如果没有默认构造函数
系统会帮助产生ㄧ个,不过不会对成员变量进行置0.只是采用系统随机值

所以我通常都回自己去实现构造函数,析构函数