调用Parent方法并访问Parent类中的私有变量?

mik*_*e_b 4 c++ inheritance

我正在尝试使用以下代码,但是我找不到关于C++如何处理公共继承和私有继承的足够好的文档,以允许我做我想要的.如果有人可以解释为什么我无法访问Parent::setSize(int)Parent::size使用私有继承或Parent::size使用公共继承.要解决这个问题,我需要在Parent中使用a getSize()setSize()方法吗?

class Parent {
    private:
        int size;

    public:
        void setSize(int s);
};

void Parent::setSize(int s) {
    size = s;
}

class Child : private Parent {
    private:
        int c;

    public:
        void print();
};

void Child::print() {
    cout << size << endl;
}

int main() {
    Child child;

    child.setSize(4);

    child.print();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 15

将父母更改为:

protected: int size;
Run Code Online (Sandbox Code Playgroud)

如果size要从派生类访问成员,而不是从类外部访问,那么您需要protected.

将孩子改为:

class Child: public Parent
Run Code Online (Sandbox Code Playgroud)

当你说class Child: private Parent,你说这应该是孩子是父母的秘密.您的main代码清楚地表明您希望将Child作为父级进行操作,因此它应该是公共继承.


cas*_*nca 5

使用私有继承时,基类的所有公共成员和受保护成员在派生类中变为私有.在您的示例中,setSize变为私有Child,因此您无法从中调用它main.

此外,size已经是私人的Parent.一旦声明为private,成员始终保持对基类的私有,而不管继承的类型如何.

  • 是的,并且私有成员没有被继承,这就是为什么你不能访问基类的私有成员 (2认同)