派生类变量范围c ++

Rst*_*voa 1 c++ inheritance

假设我们有两个类,Base并且Derived.有两种方法,getX并且setX,这是公开的,使用受保护的INT x与用户进行交互.Base构造设置x为1,Derived构造设置为x到3.

class Base {
public:
    Base();
    int getX();
    void setX(int n);
protected:
    int x;
}

int Base::getX() {
    return x;
}

void Base::setX(int n) {
    x = n;
}

Base::Base() : x(1) {
}

class Derived : public Base {
public:
    Derived();
}

Derived::Derived() : x(3) {
}
Run Code Online (Sandbox Code Playgroud)

Derived班已全面进入从基地的方法.大.

让我们说由于某种原因我不希望setX这个Derived类的用户可以使用.我有几种方法可以做到这一点.

1)Redeclare setX为私有Derived,因此阴影阻止用户完全访问该方法.

2)Redeclare x作为私有const int in Derived.但是,这会导致setX和getX与Base :: x一起使用.

3)使Base :: setX成为一个虚函数,制作一个什么都不做的Derived :: setX函数.

处理这个问题的最佳方法是什么?

Sla*_*ica 5

Derived公开衍生出来Base,你要做的事情没有多大意义.您应该使用privateprotected继承,然后Derived仅提供Base您需要的方法的访问权限,而不是方式.