0

一个类中是否有一个成员变量不是static但需要定义(因为定义了一个静态变量来保留内存)?如果是这样,我可以举个例子吗?如果不是,那么为什么静态成员是唯一可定义的成员?

BJARNE 说如果你想使用一个成员作为一个对象,你必须定义它。

但是当我明确定义成员变量时,我的程序显示错误:

class test{
    int i;
    int j;
  //...
};

int test::i; // error: i is not static member.
4

3 回答 3

0

在这种情况下,您将使用 的构造函数的初始化列表来定义实例test的初始值,如下所示:

class test {
    int i;
    int j;
  //...
public:
  test() : i(-12), j(4) {}
};
于 2012-01-26T05:45:01.770 回答
0

该定义为一个整数保留空间,但对于您创建的类的每个实例,实际上都会有一个单独的整数。如果您的程序创建了这么多test.

每次创建类的实例时,都会在运行时为非静态成员分配空间。它由类的构造函数初始化。例如,如果您希望test::i在每个实例中将整数初始化为数字 42,您可以这样编写构造函数:

test::test(): i(42) {
}

那么如果你这样做

test foo;
test bar;

你会得到两个对象,每个对象都包含一个值为 42 的整数。(当然,之后值可以改变。)

于 2012-01-26T05:45:45.023 回答
0

在您的示例中,在类中声明ij定义它们。

看这个例子:

#include <iostream>

class Foo
{
public:
    int a;         // Declares and defines a member variable
    static int b;  // Declare (only) a static member variable
};

int Foo::b;    // Define the static member variable

您现在可以a通过声明 type 的对象来访问Foo,如下所示:

Foo my_foo;
my_foo.a = 10;
std::cout << "a = " << my_foo.a << '\n';

它有点不同b:因为它static对于所有实例都是相同的Foo

Foo my_first_foo;
Foo my_second_foo;

Foo::b = 10;
std::cout << "First b = " << my_first_foo.b << '\n';
std::cout << "Second b = " << my_second_foo.b << '\n';
std::cout << "Foo::b = " << Foo::b << '\n';

对于以上所有将打印b为 10。

于 2012-01-26T06:48:25.453 回答