静态成员的声明和初始化

时间:2013-09-26 12:53:55

标签: c++ class syntax static-members

我是新来的,我正在学习C ++。我无法找到以下问题的答案:

有一个班级Player。以下短语声明了什么?

static Player * Player::bestPlayer = NULL;

我也很困惑:

string &a = b;

5 个答案:

答案 0 :(得分:2)

关于第一个问题:很难想象会出现这样的情况 合法。 (也许如果Player是命名空间,但即便如此, bestPlayer的第一个声明必须在。{1}}内 命名空间。并且不能定义,因为这条线是 定义。)

可能意味着:

class Player
{
    //  ...
    static Player* bestPlayer;
    //  ...
};

然后:

Player* Player::bestPlayer = NULL;

请注意,关键字static 必须在班级中 定义,而不是对象本身的定义,和 初始化只能在定义上 对象

至于第二个,它声明符号b是别名 a。您对a所做的任何操作都会影响b,反之亦然 您尝试做的任何事情都会将它们显示为同一个对象。 (例如&a == &b)。这被称为参考,而且 很少有任何理由将其作为本地使用 变量,它们被广泛用作函数参数,并在 特定场景作为返回值。

答案 1 :(得分:1)

这些意思是:

  1. Player*类型的静态成员初始化为NULL。删除关键字static id,声明在类之外。如果声明在里面,则删除范围解析运算符。

  2. 创建string类型的引用变量,并将b的引用分配为

    string b;  
    string &a = b;
    

答案 2 :(得分:0)

第一个将Payer类的静态成员初始化为NULL(注意成员是指针)。第二个用另一个字符串初始化对字符串的引用

答案 3 :(得分:0)

Player * Player::bestPlayer = NULL;

static类型的bestPlayer成员Player*初始化为NULL。这放在一些.cpp文件中,它属于声明,可能如下所示:

// Player.h
class Player {
public:
    static Player* bestPlayer;
    ...
};

对于您的第二个问题,它向a对象std::string声明了引用b

std::string b;
std::string &a = b;

查看:What are the differences between a pointer variable and a reference variable in C++?

答案 4 :(得分:0)

第一个片段中的代码是Player类的静态成员“bestPlayer”的定义。

静态成员在所有实例(如果是类)之间共享。它不是对象(类的实例)的成员,而是类本身的成员。

它通常用于创建单身人士(谷歌单身人士模式)。

第二个代码段中的代码为字符串变量“b”创建名为“a”的引用。 c ++中的引用类似于别名。它与指针类似。