在C++解释编译器如何能够识别一个类是抽象的还是不抽象的
In C++ Explain how compiler able to identify a class is abstract or not ?
内部编译器如何识别类是一个抽象的(我们无法为其创建对象)?
一个抽象类将包含至少一个纯虚函数。像这样的东西
virtual void foo() = 0;
任何派生自此且不覆盖此类函数的类也将是抽象的
编译器足够聪明,可以检查类或它派生的任何类中的纯虚函数。
如果类本身定义了一个纯虚函数[Ref 1],则无论它是否定义函数体,它都会被标记为抽象类。
如果一个类继承自具有纯虚函数的类,那么它必须为纯虚函数提供一个定义。如果不是,则标记为抽象。
[参考文献 1]
virtual void doSomething() = 0;
^^^^^
PS:是的,纯虚函数可以有一个定义。
当然,通过检查定义并查看它是否在抽象类的定义范围内。否则会怎么发生?
如果类至少有一个成员是抽象的,则类是抽象的。因此,如果类包含至少一个纯虚函数,那么从编译器的角度来看,它是抽象的。
virtual void PureVirtualMethod() = 0; // Any class that has methods
// with such declaration is abstract.
相关文章:
- 用C++中的一个变量定义一个常量
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 我想访问std::unique_ptr中的一个特定元素
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 删除映射和分割错误中的一个过去结束元素
- 抽象类错误,请参阅声明" "是抽象的
- 关于复制构造函数的一个棘手问题
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 我想在 Main 中用 C++ 调用其他类中的一个类,但我做不到
- 将所有 URL 组织在类中的一个位置
- 我从int x[3]得到的一个非常奇怪的输出;
- 如何从整个磁盘中排除要装载的一个文件
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++抽象的字节序是中立的吗?
- Tmax(0x7fffffff 的一个奇怪问题,为什么 (!x) == x?
- 在C++解释编译器如何能够识别一个类是抽象的还是不抽象的
- 使用cmake:我如何编写一个测试来验证类是抽象的?
- 为什么C++"虚拟"和"=0"都需要来描述一个抽象的方法?
- 一个没有纯虚方法的c++类可以被认为是抽象的吗?