是的,C++中类的数据成员不管是不是私有的,都不能进行初始化。
因为类就相当于一个数据的模板,是一种自定义组合的新数据类型,而不是一个变量。当程序声明一个类的时候,事实上并没有为程序申请存储空间,只有用这个类定义一个类对象的时候,才申请空间。连空间都没有,当然不能像定义变量一样的初始化了。
扩展资料:
类的私有数据成员的两种初始化方式如下
Point类的构造函数可以写成以下两种方式:
1、//1Point(int xx = 0, int yy = 0) {
x = xx;
y = yy;
}12345
2、//
2Point(int x = 0, int y = 0) : x(x), y(y) { }
注意,第二种方法中的初始化列表中的x(x),虽然都是相同的x变量名,但是两个x是完全不同的变量。
参考资料来源:百度百科-C++
是的,C++中类的数据成员不管是不是私有的,都不能进行初始化。因为类就相当于一个数据的模板,是一种自定义组合的新数据类型,而不是一个变量。当程序声明一个类的时候,事实上并没有为程序申请存储空间,只有用这个类定义一个类对象的时候,才申请空间。连空间都没有,当然不能像定义变量一样的初始化了。
比如定义这么一个学生类的时候:
class Stu //声明一个学生类
{private: //私有成员关键字
char Name[32]; //姓名
int ID; //学号
int Score;}; //成绩
这样程序是没有向系统申请存储空间的,所以如果在里面写上int ID=0;这样是错误的。
如果我们用这个类定义类对象的时候,比如:
Stu One[100]; //定义一个拥有100个Stu类对象的数组
这个时候,程序才向系统申请了100个类对象的空间。
当然,虽然类声明的时候不能直接初始化,但可以通过类的构造函数达到初始化的目的。比如像上面的学生类,可以这么定义:
class Stu //声明一个学生类
{private: //私有成员关键字
char Name[32]; //姓名
int ID; //学号
int Score; //成绩
public: //外部成员关键字
Stu() //无参构造函数
{strcpy(Name,"无");
ID=0;
Score=0;}
};
在类里和类名同名的函数称为构造函数,这个函数在用类定义对象的时候会由C++的编译器自动调用,这样就能达到初始化的效果。
不能,C++的类的成员变量都不能在定义的时候进行初始化。
只有被声明为static的才可以
可以。不过你说的这个在定义的时候我不明白是什么意思,是指类对象被创建的时候?类对象被创建的时候会自动调用该类的初始化函数,你想初始化私有成员变量只需要把它们的定义写在初始化函数里面就行了。
别说是私有,就连公有以及保护都是不能初始化的,初始化要不在构造函数中进行。