两次声明纯虚拟函数(在层次结构中的两个类中)是否完全合法
Is it perfectly legal to declare a pure virtual function twice (in two classes in an hierarchy)
问题的标题非常清晰。以下是我举的例子:
class A
{
public:
virtual void f() = 0;
};
class B: public A
{
public:
virtual void f() = 0;
};
class C: public B
{
public:
virtual void f() {}
};
B::f()
函数是对A::f()
的覆盖。f()
在这两种情况下都是虚拟的这一事实没有被考虑在内。
是的,这是完全合法的。
在大多数情况下,B中对f()的声明不会以任何方式改变程序的含义,但有一点冗余并没有错。
回想一下,"=0"只意味着类不能直接实例化;在实例化对象之前,必须重写所有纯虚拟函数。
您甚至可以提供纯虚拟函数的定义,该函数可以在子类的实例上调用。通过显式声明B::f(),您可以选择为B::f()给出定义。
这三个f()函数是不同的,但在两个类中声明相同的虚拟函数是合法的,因为A中的f()在B中的f()中被重写。它的函数调用依赖于类对象。
因此,根据上面的代码,您没有创建类A和B的实例的权限。因此,每次调用类C内部的函数define时都会被调用。
相关文章:
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 是否可以在 OpenGL 中的同一调用中呈现两个具有不同索引起点的不同缓冲区?
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何更好地检查两个 char 变量是否在一组值中?
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 检查两个模板参数是否相同
- 是否可以在 for 循环中添加两个浮点数?
- 是否允许三元运算符在C++中计算两个操作数?
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 检查两个向量是否并行的最有效方法
- 检查两个图是否为补码的功能
- gtest:检查字符串是否等于两个字符串之一
- 如何在c/c++中检查两个任意内存范围是否重叠
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支