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

C++中为什么不能在类定义中初始化非静态成员变量解决思路

2012-04-04 
C++中为什么不能在类定义中初始化非静态成员变量而必须在构造函数中初始化呢?[解决办法]偶就知道是规定。[

C++中为什么不能在类定义中初始化非静态成员变量
而必须在构造函数中初始化呢?

[解决办法]
偶就知道是规定。
[解决办法]
规定,这就够了。
[解决办法]
如果成员都在定义时给了默认初始值,那还要构造函数干嘛?
构造函数本来就是为了所有成员初始化而存在的,这样集中初始化可以方便管理。

假如有一个非常大的类,上百个成员函数,又有N个成员变量夹杂在这么多成员函数中,假如成员变量可以定义时给定初值的话,那么你决得是分散在各个成员变量定义时初始化好呢?还是集中在一个构造函数中初始化好呢?
[解决办法]
规定而已...

C#可以...C++就不可以....

至于哪个好...仁者见仁...


[解决办法]
其实C#的初始化是编译器自动生成了一个特殊的函数.ctor,这个函数里面进行初始化工作...

C++编译器没有这个功能.
[解决办法]
编译器的限制
如果是static的就可以,因为编译器可以
[解决办法]
C++中为什么不能在类定义中初始化非静态成员变量
你都说是在类的定义中了,只是定义了类,没有实例化,static可以初始化是因为它是保存在内存中类外的全局变量区域的
[解决办法]
定义类的时候并没有分配内存,这时候赋值的话值放在哪里呢?
当用类构造对象的时候首先分配内存然后调用构造函数,这时候才可以初始化非静态成员变量.
静态成员变量定义的时候在静态存储区中就分配了内存所以可以初始化.
[解决办法]
规定,而且也不应该在构造函数中初始化,如果你这样做了,说明你代码写错了
合理的做法

class A
{
static int i;
};

int A::i =0; //这才是合理的初始化方式
[解决办法]
C++中为什么不能在类定义中初始化非静态成员变量?

首先,类究竟什么?类是一个对事物具体抽象的模型,注意,它仅是一个抽象的、慨念上的东东。从程序设计层面看,它仅是一个声明,并不代表一个具体的实例,例如:

class Fish
{
long _x;
void show(void);
}

//即使它有成员函数的定义:
void Fish::show(void)
{
}

即使它有成员函数的定义,但在内存实例这个层面,它什么也没有!什么都没有,你到那儿去初始化它的成员x呢?

而且,从类的语意来看,它表示有无限个具有相似性(不是相同性)的对象实例的抽象慨括,非静态成员变量对类来说,是一个变化的值(有无穷的解),它是类的可变部份,语言以及类的设计者不能以相同的值去初始化其可变部份(x)!

但对类的不变部份,语言还是适当的允许你在类中去初始化,例如整型int及类整型(long、
char等)等静态常量你还是可以在类中初始化它们的!


热点排行