在类内部或外部定义某些内容有什么区别?


C++
class A{
int a;
};

int A::a=10;

C++
class A{
int a=10;
};

前者有效,但后者无效。 我不明白——编译时它们有什么区别?

我尝试过的:

询问我的朋友、询问 chatgpt、Google

解决方案1

这是一个简单的问题,但答案有点复杂。
当您尝试编译第一个版本时:

C++
class A{
int a;
};

int A::a=10;

Youi 将收到一条错误消息,告诉您“a 不是类的静态成员 A“这是绝对准确的 – 但除非你理解类、实例和静态变量/方法,否则它并没有真正的帮助。

类可以具有两种类型的“元素”:静态元素和实例元素(其中元素是字段、属性、方法、事件或委托)

静态元素由所有实例共享,并通过类名访问。
实例元素对于类的每个不同实例都是唯一的,并且可以通过保存实例引用的变量来访问。 这似乎也没有什么意义——但确实如此,而且你在现实世界中非常非常清楚这一点!

想一想汽车:所有汽车都有一种颜色 – 但具体是什么颜色取决于您所谈论的具体汽车。 我的车是黑色的; 你的车是红色的; 这辆车是绿色的; 那辆车是蓝色的。 Color 是 Car 类的一个实例属性,因为您需要有一个 Car 的特定实例才能提出“它是什么颜色?”的问题。 – 你不能说“汽车是什么颜色?” 因为如果不说明你指的是哪辆车就没有意义。
但汽车也有静态属性:你可以问“一辆车有多少个轮子?” 因为所有的汽车都有四个轮子。 (如果有两个,那就是摩托车,而不是汽车)

你的第一个例子试图做的是“设置所有汽车的颜色”,这是不可能的; 你的第二个尝试是“设置这辆特定汽车的颜色”,这是很有可能的!

到目前为止有意义吗?

コメント

タイトルとURLをコピーしました