我是新来的,我正在学习 C++。我找不到以下问题的答案:
有一堂课Player
。以下短语声明了什么?
static Player * Player::bestPlayer = NULL;
我也很困惑:
string &a = b;
我是新来的,我正在学习 C++。我找不到以下问题的答案:
有一堂课Player
。以下短语声明了什么?
static Player * Player::bestPlayer = NULL;
我也很困惑:
string &a = b;
关于第一个:很难想象一个合法的案例。(也许 ifPlayer
是一个命名空间,但即便如此,第一个声明也bestPlayer
必须在命名空间内。并且不能是定义,因为这一行是定义。)
大概的意思是这样的:
class Player
{
// ...
static Player* bestPlayer;
// ...
};
进而:
Player* Player::bestPlayer = NULL;
请注意,关键字static
必须在类定义中,而不是在对象本身的定义上,并且初始化只能在对象的定义上。
至于第二个,它将符号声明b
为 的别名
a
。你所做的任何事情都会a
影响b
,反之亦然,你尝试做的任何事情都会表明它们是同一个对象。(例如&a == &b
)。这称为引用,虽然很少有理由将其用作局部变量,但它们被广泛用作函数参数,并在特定场景中用作返回值。
这些意味着:
类型的静态成员Player*
被初始化为NULL
. static
删除声明在类之外的关键字id。如果声明在内部,则删除范围解析运算符。
创建类型的引用变量string
并将引用分配为b
as
string b;
string &a = b;
第一个将 Payer 类的静态成员初始化为 NULL(注意成员是指针)。第二个用另一个字符串初始化对一个字符串的引用
Player * Player::bestPlayer = NULL;
将type的static
成员初始化为。这被放置在某个文件中,它属于声明,它可能看起来像这样:bestPlayer
Player*
NULL
.cpp
// Player.h
class Player {
public:
static Player* bestPlayer;
...
};
对于您的第二个问题,它声明了a
对std::string
object的引用b
:
std::string b;
std::string &a = b;
第一个片段中的代码是 Player 类的静态成员“bestPlayer”的定义。
如果一个类,静态成员在所有实例之间共享。它不是对象(类的实例)的成员,而是类本身的成员。
它通常用于创建单例(谷歌单例模式)。
第二个片段中的代码为字符串变量“b”创建了一个名为“a”的引用。c++ 中的引用类似于别名。它类似于指针。