c++ - 引用变量和虚函数

标签 c++ reference pure-virtual

我在使用引用变量时发现了一个奇怪的行为。

这里是类的实现:

class Base {
    public:
        virtual void Method() = 0;
};

class DerivedA : public Base {
    public:
        virtual void Method() {}
}

class DerivedB : public Base {
    public:
        virtual void Method() {}
}

这是一个具有奇怪行为的示例代码:

void main(int argc, char *argv[]) {
    DerivedA a;
    DerivedB b;
    Base &base = a;

    base.Method();   // Calls DerivedA::Method

    base = b;
    base.Method();   // Calls DerivedA::Method!!! Why doesn't call DerivedB.Method()?
}

综上所述,似乎只有在初始化引用变量时才确定与引用变量“关联”的虚函数指针表。如果我重新分配引用变量,vfpt 不会改变。

这里发生了什么?

最佳答案

Base &base 是一个引用,即 a 对象的别名,所以赋值 base = b 等同于 a = b,这使得 base 仍然是同一类的同一对象。这不是您假设的指针重新分配。

关于c++ - 引用变量和虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367096/

相关文章:

c++ - 检查值是否在集合 p1 和 p2 中但不在 p3 中

c++ - 缩写类型名称 long long 与 long long int,是否符合标准?

c++ - 在包含 char 字符串的对象上使用析构函数时出现断点异常

c++ - 引用与设置局部变量

C++多次通过引用返回

实现纯虚类的 C++ 实例集合

c++ - swprintf 意外结果

c++ - 使用模板生成纯虚基类方法

c++ - 由于 Compressed_pa​​ir,无法编译纯虚拟结构和 unique_ptr 的 DLL 导入

c - C 中 Void 函数在 vector 上的返回