C++ 中“virtual”的含义/起源是什么?

问题描述 投票:0回答:1

virtual
C++ 中的关键字听起来与“虚拟机”、“虚拟现实”等其他词有点不同。

是的,我明白

virtual
关键字在这两种情况下的作用。然而“虚拟”的含义与这两种情况有关吗?虚拟意味着“不存在,不真实,发生在网上/计算机世界内部”的东西,这与虚拟基类/函数有何关系?


示例)

class Interface {
    public:
        virtual void foo() = 0;
};

class Impl: public Interface {
    public:
        void foo() override { ... } 
};

对于纯虚函数,我可以看到它们是“虚拟的”,派生(或接口实现)类应该实现那些不存在的函数才能工作。

class Animal {
    public:
        virtual void say() { cout << "I'm animal" << endl; }
};

class Dog: public Animal {
    public:
        void say() override { cout << "WOOF" << endl; }
};

但是在这种情况下,普通的虚函数,它们具有原始形式(说“我是动物”),并且派生类的重写函数在运行时动态调用,这让我认为虚函数看起来并不“虚拟”对我来说。

c++
1个回答
0
投票

然而“虚拟”的含义与这两种情况有关吗?

这两种情况通常都是通过额外的间接来实现的。

在虚拟方法的情况下,每个对象的实现部分将是与虚拟成员函数相对应的函数指针表,而不是可以嵌入调用站点的非虚拟成员函数的静态地址.

在虚拟基的情况下,实现将每个对象的一部分作为与从

this

 获取指向虚拟基的指针所需的调整相对应的偏移量,而不是这些偏移量作为类型的静态属性。这也是为什么 
offsetof
 不适用于具有虚拟基的类的成员。

© www.soinside.com 2019 - 2024. All rights reserved.