类和类成员的链接

Linkage of Classes and Class members

本文关键字:链接 成员      更新时间:2023-10-16

以下是我知道的外部和内部链接的定义。

具有内部链接:可以在翻译单元内使用。

具有外部链接:存在于特定翻译单元之外,可通过整个程序访问。

这是一个例子:

假设我有一个名为 A.h 的头文件,我在其中声明类成员和成员方法(构造函数、析构函数......在名为 A.cpp 的 cpp 文件中,我定义了这些方法。

在包含头文件的主文件中.cpp我使用类 A 的构造函数创建了一个类型 A 的对象 a。

现在假设我将 A 的类成员声明为私有或受保护,我无法通过我的主文件访问它们.cpp。如果我宣布它们是公开的,我可以。

这是我的问题:当我声明 A 的类成员是私有的或受保护的时,说他们有内部联系有意义吗?

我对链接实际上代表什么感到非常困惑,并且在谈论内部或外部链接时是可能的。

现在假设我将 A 的类成员声明为私有或受保护,我无法通过我的主文件访问它们.cpp。

是的,你可以。只需从A.cpp中获取其中一个定义并将它们移动到main.cpp.该定义将能够访问A的私有成员。这是完全合法和有效的C++。

访问控制(公共/私有/等(确定哪个代码可以命名该类的成员。它们不控制定义这些成员的位置。也就是说,访问控制可以根据名称出现的代码的特定上下文隐藏名称,而不是显示名称的文件。

链接(部分(控制名称在整个程序中的可见性,相对于声明/定义该名称的特定翻译单元(又名:源文件(。Linkage 非常关心名称出现在哪个文件中,相对于该名称的声明/定义位置。

话虽如此,某种类型的成员根本没有链接。您可以认为它们与类型本身具有相同的链接。链接适用于命名空间/全局范围的声明和定义,而不是类成员。