在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
Define the method once to be virtual in the inheritance hierarchy to make polymorphism to work
在继承层次结构中将方法定义为virtual
是否足以使多态性发挥作用。在以下示例中,Der::f未定义为virtual
,但d2->f();
打印der2我正在使用VS IDE(可能只是在那里…)
class Base
{
public:
virtual void f() { std::cout << "base"; }
};
class Der : public Base
{
public:
void f() { std::cout << "der"; } //should be virtual?
};
class Der2 : public Der
{
public:
void f() { std::cout << "der2"; }
};
int main()
{
Der* d2 = new Der2();
d2->f();
}
是的,如果只在基类中将方法定义为虚拟方法,多态性就会起作用。然而,我在处理一些大型项目时遇到的惯例是,在派生类的方法声明中总是重复虚拟关键字。当您处理许多具有复杂类层次结构(许多继承级别)的文件时,它可能很有用,其中类在单独的文件中声明。这样,您就不必在添加另一个派生类时通过查找基类声明来检查哪个方法是虚拟的。
直接或通过多个层从Base继承的所有东西都将具有虚拟的f(),就好像在声明f()时类declarion已明确放置了virtual
一样。
相关文章:
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 访问随机图像像素的快速方法,最多一次
- 只设置一次方法中变量的值
- cppUnit:针对多个测试方法执行一次的设置函数
- 是否有一种方法可以在运行时停止循环重复一次不止一次
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 最简单的方法使多个指针一次指向同一位置,一次只处理2个位置
- C++菱形问题 - 如何仅调用一次基方法
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 当Bool值在UPDATE()方法中更改时,只有一次呼叫函数
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 有没有一种优雅的方法,根据用户输入只决定一次
- 如何确保方法在该对象的生存期内仅执行一次?
- 在方法中构造一个std:映射一次
- 只为NOT STATIC类的EACH对象调用一次方法
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- C++执行一次序列的最佳方法
- Linux/c++ 定时方法,尽管有漂移,但每 N 秒执行一次
- 如果一个基类有2个派生类,并且这些类每个都有一个派生类.那么我可以为大多数派生类扩展一个基方法*一次*吗