如何使派生类函数私有,以便基类指针无法访问它?

时间:2014-10-11 13:44:34

标签: c++ oop inheritance

#include <iostream>
using namespace std;

class B
{
    public:
    virtual void acctobase() {
        cout <<"base\n";
    }
};


class D: public B
{
    void acctobase() {
        cout <<"derived\n";
    }
};

int main() {

    B* o = new D();
    o->acctobase();//i want this function not to be accessible using derived class object

    return 0;
}

我尝试过私人B :: accatobase;但它仍然是可访问的,我也不想私下继承B类,所以如何更改其访问说明符?

2 个答案:

答案 0 :(得分:3)

你不能按照设计做到这一点。

派生类必须始终与其基类兼容,因为您可以在基类上调用的任何函数都可以在其所有派生类上调用。这就是Liskov Substitution Principle的意思。这就是为什么你可以在派生类中更容易地使基类中的成员函数可访问,但是你不能使它不易访问。

答案 1 :(得分:1)

您可以将派生类中的方法实现为throw std::logic_error();。然后任何调用者都会在运行时收到错误。毕竟,你正在做一些从根本上要求运行时类型检查的事情 - 如果方法应该是可访问的,你通常不能在编译时知道,所以你只能使它“无法访问”(不可用)运行时。