每当我在一个类中定义一个变量并同时给它一个值时,我都会得到一个错误。这是什么原因?
如您所见,这不起作用...
class myClass {
private:
int x = 4; // error
};
但是当我保持变量未定义时,它会:
class myClass {
private:
int x;
};
每当我在一个类中定义一个变量并同时给它一个值时,我都会得到一个错误。这是什么原因?
如您所见,这不起作用...
class myClass {
private:
int x = 4; // error
};
但是当我保持变量未定义时,它会:
class myClass {
private:
int x;
};
由于没有其他人使用成员初始化,我将向您介绍:
class myClass {
private:
int x;
public:
myClass() : x (4){}
};
在构造函数的主体中使用 this 分配总是更好,因为在主体开始时,所有用户定义的成员都已经被初始化,无论你是否这样说。最好执行一次并实际初始化非用户定义的成员,这是唯一适用于非静态const
成员和引用成员的方法。
例如,以下内容将不起作用,因为x
没有在正文中初始化,它被分配给:
class myClass {
private:
const int x;
public:
myClass() {x = 4;}
};
但是,使用成员初始化程序会,因为您正在初始化它:
class myClass {
private:
const int x;
public:
myClass() : x (4){}
};
另请注意,您的int x = 4;
语法在 C++11 中完全有效,它可以用于任何需要的初始化,因此如果您开始使用它,您将受益。
在构造函数中初始化变量。
class myClass {
private:
int x;
public:
myClass()
{
x = 4; // hope that it will work
}
};
更新答案: 根据chris,最好使用成员初始化
class myClass {
private:
const int x;
public:
myClass() : x (4){}
};
实例变量应该使用 setter 方法、IE:setX(input)
或在构造函数中定义。
你的班级就像一张蓝图。它没有任何与之关联的存储。当您实例化您的类的对象时,这类似于基于该蓝图的建筑物。您的对象具有存储空间,并且可以保存您赋予成员变量的值。
此外,正如其他人指出的那样,可以在 C++11 中做你想做的事情。查看: http ://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
在 C++03中,
只能在类中初始化静态 const 整数数据成员。
在构造函数中初始化,或者使数据成员static const
:
class myClass {
private:
int x;
public:
myClass() {
x = 4;
}
};
或者
class myClass {
private:
static const int x = 4;
};
这样做:
class myClass
{
private:
static const int x = 4;
};
如果您不是x
静态或常量,请仅使用int x;
并在类的构造函数中初始化x
。