是否可以限制对包含的 class 的访问?
Is it possible to have restricted access to included class?
我在 A.h 文件中有 class 说 A
,在 B.h 文件中有 class B: public A
。
A.h 文件
#ifndef A_H
#define A_H
class A
{
public:
void foo {}
};
#endif
B.h 文件
#ifndef B_H
#define B_H
#include "A.h"
class B: public A
{
...
};
#endif
有没有一种方法可以包含 B
但在我包含 A.h 之前无法访问 A
?
像这样
#include "B.h"
main() {
B* b = new B(); //OK
b->foo(); //OK
A* a = new A(); //Error
a->foo(); //Error
}
没有。 B.h 取决于 A 的定义,因此如果不包含 A 的定义就无法包含 B.h。如果必须在 [=16] 中定义 B,则无法绕过该依赖关系=] 如果 B 必须继承 A.
您可以通过将 A
更改为抽象类型来使创建单独的 A
成为错误。但即使 A.h 单独包含在内,这仍然是一个错误。
我在 A.h 文件中有 class 说 A
,在 B.h 文件中有 class B: public A
。
A.h 文件
#ifndef A_H
#define A_H
class A
{
public:
void foo {}
};
#endif
B.h 文件
#ifndef B_H
#define B_H
#include "A.h"
class B: public A
{
...
};
#endif
有没有一种方法可以包含 B
但在我包含 A.h 之前无法访问 A
?
像这样
#include "B.h"
main() {
B* b = new B(); //OK
b->foo(); //OK
A* a = new A(); //Error
a->foo(); //Error
}
没有。 B.h 取决于 A 的定义,因此如果不包含 A 的定义就无法包含 B.h。如果必须在 [=16] 中定义 B,则无法绕过该依赖关系=] 如果 B 必须继承 A.
您可以通过将 A
更改为抽象类型来使创建单独的 A
成为错误。但即使 A.h 单独包含在内,这仍然是一个错误。