相关疑难解决方法(0)

为什么我可以通过指向派生对象的基类指针访问派生的私有成员函数?

#include<iostream>

using namespace std;
class base
{
public:
    virtual void add() {
        cout << "hi";
    }
};

class derived : public base
{
private:
    void add() {
        cout << "bye";
    }
};

int main()
{
    base *ptr;
    ptr = new derived;
    ptr->add();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是 bye

我对这是如何实现没有问题.我理解你使用vtable和派生的vtable包含新的add()函数的地址.但是当我尝试在类外部访问它时,add()是私有的,不应该编译器生成错误吗?不知怎的,这似乎不对.

c++ polymorphism inheritance access-modifiers

30
推荐指数
3
解决办法
2299
查看次数

标签 统计

access-modifiers ×1

c++ ×1

inheritance ×1

polymorphism ×1