C++虚拟关键字和系统更新
C++ Virtual keyword and System update
如果我有遗留的c ++代码,如下所示:
class A
{
virtual void Method1() { cout << "A::Method1()" << std::endl; }
}
int main()
{
A *a = new A;
a->Method1();
}
我想添加或更新以下新代码:
class B : A
{
void Method1() { cout << "B:Method1()" << std::endl; }
}
如何更新系统,以便调用派生类中的method1((而不是基类中的method1((,行为a->Method1((? 我知道虚函数表将更新为在派生类中调用method1((,但main((也必须更新如下:
int main()
{
A *a = new B;
a->Method1();
}
输出:
B:方法1((
否则,将继续调用 A:Method1((。我已经在可视化工作室下验证了这一点。
无论如何,事实是 - 必须更新 main(( 违背了将 Method1(( 定义为虚拟的目的,因为您必须更改 main((,然后重新编译它,安装和部署它。
你上面所说的一切都是正确的。您似乎误解了虚拟方法的目的。目的不是为了节省您在改进方法时重新编译和重新安装应用程序的时间。事实上,你不会仅仅使用继承来改进方法。您可以使用继承来表明不同的类以某种方式相关。虚函数允许一些继承的类共享功能,而其他继承的类则提供自己的功能。
换句话说,您不会class B
改进class A
。您之所以class B
,是因为您还有其他工作要做,这些工作在某种程度上与class A
所做的工作有关。
请注意,您可以使用接口样式(或混合输入(基类作为插件的父类。然后,您只需重新编译插件并让应用程序重新加载它。通常,基类将具有几个插件子类将实现的纯虚拟方法。
相关文章:
- 从C++本机插件更新Vector3数组
- C++,系统无法执行指定的程序
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 在UNIX系统中使用DIR查找文件的字节大小
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- cmake更新缓存的变量
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在C++游戏中与库存系统作斗争
- 更新到莫哈韦后出现cmath错误
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何在ECS框架中更新组件数据和通知系统
- 有关纯 ECS(实体组件系统)和更新系统的问题
- C++虚拟关键字和系统更新
- 如何使用比系统提供的更新版本的clang链接到线程消毒剂
- 自动更新QDateTimeEdit,以便它显示当前的系统日期和时间
- GNU 4.8.1系统更新后,任何C++编译都会崩溃
- MFC 的"更新命令 UI"系统如何工作?
- 是否应在几何体着色器中完全更新粒子系统