如果我在不同的类中包含基类,是否也会包含该基类的派生类
If i include a base class in a different class, will that base's derived classes be included also
如果我在不同的类中包含基类,该基类的派生类是否也会包含在内。如果我包含一个形状类,并且该类是派生类方形和圆形的基类,那么方形和圆形是否会包含在该不同的类中。
我想这样做,所以如果我决定稍后添加另一个形状类(称之为菱形),它会更容易编写......
#include <shapes.h>
而不是...
#include <square.h>
#include <circle.h>
#include <triangle.h>
不,它不会。
当你执行#include<a.h>
时,预处理器递归地内联 a.h 中的内容。
因此,在您的情况下,您只会获得基类。
此外,这样做不是一个好主意(包括基类所在的.h并获取所有派生类)。
如果这样做,也许有一天你只想创建一个从基派生的类,包括所有根本不使用的派生类,从而增加代码大小。
否,派生类的头文件不会自动包含。但是,好消息是,在大多数情况下,您可能根本不需要包含派生类的头文件 - 负责创建不同形状对象的代码需要了解圆形和三角形,但在大多数情况下,绘制形状的代码(例如)可以简单地调用虚拟draw
函数,该函数将为碰巧的形状做正确的事情。鉴于。虚函数的实现方式是,调用 shape 的draw
函数将正确调用圆形和三角形的重写版本,即使这些类的头文件未包含在进行调用的文件中也是如此。
如果你发现你的代码经常需要知道某物是圆形还是三角形(因此需要包含头文件),这可能表明 shape 类的接口存在问题。在这种情况下,您应该再看一下形状,看看是否可以以可以调用虚函数的方式更改它,并让编译器整理出每个形状的正确实现。
对于通常希望包含在一起的一大堆头文件这一更普遍的问题,您可以通过创建一个包含所有其他头文件的单个头文件来使生活更轻松。例如,您可以创建shape_library.h
并将所有不同形状标题的#include
s放在其中。这样,其他所有内容都可以只包含shape_library.h
,如果标题重新排列,您只有一个地方可以更改。
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- 检查该类在编译时C++中是否有任何基类
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- 使用成员的地址初始化基类是否合法?
- 假设 C++11 中已知子级布局,重新插入基类是否安全
- 此嵌套模板基类是否不明确?
- 当试图检测基类是否具有虚拟破坏者时,如何获取正确的编译器错误消息
- 在继承期间,基类的基类是否也继承?
- C++ 基类是否有可能具有派生类参数的函数
- 使用sfinae来检测可变模板的基类是否有特定的方法
- 虚拟基类是否是可行和/或有用的功能
- 继承中的基类是否复制到派生类
- 在此示例中使用空基类是否合理
- 基类是否可以具有作为派生类实例的成员
- 编译时检查基类是否为"接口"
- 基类是否有可能具有不在派生类中的函数?