c++14 - C++中虚函数的意义
问题描述
我正在学习 C++ 并遇到了虚函数。我知道虚函数是在基类中声明并在派生类中使用的函数。在定义的基础上,我尝试制作两个简单的程序。请看下面:
该程序使用 virtual 关键字:
#include <iostream>
using namespace std;
class Name {
public :
Virtual void myName() {
cout << "My First Name is Varun" << endl ;
}
};
class LName: public Name{
public :
void myName() {
cout << "My Last Name is Srivastava" << endl;
}
};
int main() {
Name *name = new Name();
name -> myName();
LName *lname = new LName();
lname -> myName();
Name *nm;
LName ln;
nm = &ln;
nm -> myName();
ln.myName();
}
输出 :
My First Name is Varun
My Last Name is Srivastava
My Last Name is Srivastava
My Last Name is Srivastava
下面的示例没有虚拟关键字:
#include <iostream>
using namespace std;
class Name {
public :
void myName() {
cout << "My First Name is Varun" << endl ;
}
};
class LName: public Name{
public :
void myName() {
cout << "My Last Name is Srivastava" << endl;
}
};
int main() {
Name *name = new Name();
name -> myName();
LName *lname = new LName();
lname -> myName();
Name *nm;
LName ln;
nm = &ln;
nm -> myName();
ln.myName();
}
输出 :
My First Name is Varun
My Last Name is Srivastava
My First Name is Varun
My Last Name is Srivastava
在这里我可以看到差异,但我无法了解为什么输出存在差异以及“虚拟”关键字究竟在做什么。
解决方案
推荐阅读
- javascript - 对一个对象反应 setState 不正确
- javascript - CSS 不适用于注入的 HTML
- ms-access - 访问:更改事件后
- php - 基于用户在 Woocommerce 中购买的总金额的自定义购物车通知
- git - How to trigger a bash script only after a merge request is merged?
- azure-cognitive-search - 如何将 Azure 搜索服务端点添加到流量管理器
- javascript - Node js - 如何访问 SOAP WebService?
- azure-digital-twins - 空间图 - 对象可以有多个父对象,如何移动它们,以及包含哪些选项?
- kubernetes - Kubernetes - StatfulSets,如何将有状态实例与节点挂钩?
- android - 我需要将我的 APP 迁移到 Android Studio 3.2.1 中的 AndroidX 库吗?