对不起,如果问题是旧的或有点愚蠢。
我知道声明和定义的基础知识,但在 C++ 中似乎有很多不一致或“例外”,这使得它不和谐,至少对我来说是这样。或者,我误解了什么。
所以,在头文件中,我们声明了一些变量并定义了类类型(也听说过“类声明”,不知道哪个更准确);在每个类中,我们声明成员变量和函数。然后在一些 .cc/.cpp 文件中,我们只定义成员函数来实现类。如果“不幸”有一个静态成员变量/函数,它被认为是特殊的并且完全独立于关联的类,它必须在类之外定义,作为成员变量中唯一的一种“怪胎”。
当 .cpp 文件#include
sa定义类类型的头文件时(请注意,该头文件中的类类型定义似乎“不完整”,因为它的功能在其他地方定义。),.cpp 文件将类类型定义放在开头,以及其他可能的声明。
在.cpp文件中,#include
d类的静态成员变量已经在实现.cpp中连同成员函数一起定义了,那么如果创建了类的实例,那么非静态的“普通”成员变量呢?假设它是Class A;
,那么非静态成员变量是否会被定义A a;
?当然定义a
了一个类型A
的对象,但是它的非静态成员变量是否也被定义(在分配内存的意义上定义)?如果是这样,那么两个相同类型的对象,比如说和,完全可以在一起,因为和有不同的a1
a2
A
a1.mem_var_1
a2.mem_var_1
关于不同类实例名称的定义?或者,它们共享“相同的定义”但具有不同的值和副本?
成员函数呢?它们已经在类类型的.cpp文件中定义了,但是当我们创建多个实例时,它们不会在.cpp中共享相同的定义但在内存中有不同的副本(我猜是同一个成员函数的多个副本至少对于内部局部变量的不同值是必要的)?静态函数呢?
或者,我误解了一些东西,因为我们程序员“定义”文件中的某些东西不等于编译器和链接器“定义”文件中的东西?定义的真正作用和含义是什么?我们在一个文件中写入“定义”某些东西,但系统可以“定义”不同的东西,至少在秘密制作多个副本和东西的意义上?
我头痛...