为什么在运行时处理虚函数?

可惜

当然,在某些情况下,编译器足够聪明,可以准确推断出您想要的功能,而其他情况又需要运行时支持吗?

FreeNickname

因为我们并不总是知道,所以在运行时我们将面对哪个实例。

例如,你有类:SuperClassSubclass1并且Subclass2,他们都有一个方法doACoolThing()用户按下一个按钮012,并根据他的输入,创建相应的类的一个实例,它的doACoolThing()方法被调用。

我们(以及编译器)也无法确定在运行时将调用哪种类的方法。

这就是为什么这些技巧需要运行时支持的原因。

一个小例子来说明一个想法(PS不写这样的代码,它只是在说明多态性:)):

#include <iostream>

using namespace std;

class SuperClass
{
public:
    virtual void doACoolThing();
};

void SuperClass::doACoolThing()
{
    cout << "Hello from the SuperClass!" << endl;
}

class Subclass1 : public SuperClass
{
    virtual void doACoolThing() override;
};

void Subclass1::doACoolThing()
{
    cout << "Hello from the Subclass1" << endl;
}

class Subclass2 : public SuperClass
{
    virtual void doACoolThing() override;
};

void Subclass2::doACoolThing()
{
    cout << "Hello from the Subclass2" << endl;
}

int main()
{
    int userInput;
    cout << "Enter 0, 1 or 2: ";
    cin >> userInput;
    SuperClass *instance = nullptr;
    switch (userInput)
    {
        case 0: 
            instance = new SuperClass();
            break;
        case 1:
            instance = new Subclass1();
            break;
        case 2:
            instance = new Subclass2();
            break;
        default:
            cout << "Unknown input!";
    }

    if (instance)
    {
        instance->doACoolThing();
        delete instance;
    }
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数重载在运行时如何工作?为什么重载?

来自分类Dev

javascript-为什么在运行时调用了声明的函数

来自分类Dev

相似的递归函数在运行时上有很大的差异。这是为什么?

来自分类Dev

函数重载在运行时如何工作,为什么会重载?

来自分类Dev

为什么Java在运行时需要classpath

来自分类Dev

为什么会在运行时遇到问题?

来自分类Dev

为什么这个简单的strcat在运行时崩溃?

来自分类Dev

为什么在运行时未实现重载?

来自分类Dev

为什么 Android 视图值在运行时不同?

来自分类Dev

成员析构函数运行时,类具有什么类型的虚函数?

来自分类Dev

在运行时处理 OpenGL 错误

来自分类Dev

为什么Python运行时以这种方式处理警告?

来自分类Dev

为什么C ++允许在运行时将数组大小传递给函数以构造固定大小的数组?

来自分类Dev

为什么constexpr函数可以与在运行时生成的变量一起很好地工作?

来自分类Dev

TypeScript 1.8-为什么我的React无状态函数组件在运行时抛出TypeError?

来自分类Dev

在运行时快速创建函数

来自分类Dev

递归函数在运行时崩溃

来自分类Dev

Javascript:在运行时创建函数

来自分类Dev

为什么在运行简单的docker映像时出现oci运行时错误?

来自分类Dev

为什么我的程序在运行时在命令窗口中什么都不输出?

来自分类Dev

为什么某些Docker映像在运行时需要命令?

来自分类Dev

为什么声明的对象类型在运行时很重要?

来自分类Dev

为什么在运行时使用此代码会收到“无效的参数”?

来自分类Dev

为什么这段代码在运行时永远不会死锁?

来自分类Dev

C ++是静态类型语言,为什么我们可以在运行时获取类型

来自分类Dev

为什么必须在运行时构造字符串?

来自分类常见问题

为什么不能在运行时安全地生成fmt :: Arguments?

来自分类Dev

需要帮助以了解为什么在运行时不考虑重载的equals方法

来自分类Dev

为什么该switch语句在运行时结束while循环?

Related 相关文章

  1. 1

    函数重载在运行时如何工作?为什么重载?

  2. 2

    javascript-为什么在运行时调用了声明的函数

  3. 3

    相似的递归函数在运行时上有很大的差异。这是为什么?

  4. 4

    函数重载在运行时如何工作,为什么会重载?

  5. 5

    为什么Java在运行时需要classpath

  6. 6

    为什么会在运行时遇到问题?

  7. 7

    为什么这个简单的strcat在运行时崩溃?

  8. 8

    为什么在运行时未实现重载?

  9. 9

    为什么 Android 视图值在运行时不同?

  10. 10

    成员析构函数运行时,类具有什么类型的虚函数?

  11. 11

    在运行时处理 OpenGL 错误

  12. 12

    为什么Python运行时以这种方式处理警告?

  13. 13

    为什么C ++允许在运行时将数组大小传递给函数以构造固定大小的数组?

  14. 14

    为什么constexpr函数可以与在运行时生成的变量一起很好地工作?

  15. 15

    TypeScript 1.8-为什么我的React无状态函数组件在运行时抛出TypeError?

  16. 16

    在运行时快速创建函数

  17. 17

    递归函数在运行时崩溃

  18. 18

    Javascript:在运行时创建函数

  19. 19

    为什么在运行简单的docker映像时出现oci运行时错误?

  20. 20

    为什么我的程序在运行时在命令窗口中什么都不输出?

  21. 21

    为什么某些Docker映像在运行时需要命令?

  22. 22

    为什么声明的对象类型在运行时很重要?

  23. 23

    为什么在运行时使用此代码会收到“无效的参数”?

  24. 24

    为什么这段代码在运行时永远不会死锁?

  25. 25

    C ++是静态类型语言,为什么我们可以在运行时获取类型

  26. 26

    为什么必须在运行时构造字符串?

  27. 27

    为什么不能在运行时安全地生成fmt :: Arguments?

  28. 28

    需要帮助以了解为什么在运行时不考虑重载的equals方法

  29. 29

    为什么该switch语句在运行时结束while循环?

热门标签

归档