在类定义中分配类变量,而不是在类实例化中



在定义类时分配类变量与在类构造函数中分配类变量有什么区别?所有类实例都可以访问类定义中分配的变量吗?

实例化时的分配示例:

class Foo
{
private:
int x;
double y;
public:
Foo()
{
x = 0;
y = 1.;
}
};

类定义中的赋值示例:

class Foo
{
private:
int x = 0;
double y = 1.;
public:
Foo();
};

编辑:关于所有实例都可以访问的类成员,我想我在寻找static声明的概念,我想这只是花括号语言的新手。

在这个代码片段中

int x = 0;
double y = 1.;

没有作业。存在初始化。

在这个代码片段

Foo()
{
x = 0;
y = 1.;
}

确实使用了赋值运算符。

通常,对于复杂类型的对象,它可能是1(不可能的(默认构造函数或赋值运算符不可用(或2(需要许多资源,因为首先调用创建对象的默认构造函数,然后调用赋值运算符。

至少像一样定义构造函数是可取的

Foo() : x( 0 ), y( 1 )
{
}

使用mem初始值设定项列表。

类定义中分配的变量是否可由所有类实例访问?

不!

不同之处在于,在第一种情况下,您默认初始化成员变量,然后为它们赋值。在第二种情况下,您对它们进行初始化,这是首选。第三个选项,也是值初始化它们,是使用成员初始化器列表:

class Foo
{
private:
int x;
double y;
public:
Foo() : x{0}, y{1.}
{
}
};

最新更新