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

时间:2010-10-24 17:41:56

标签: c++ inheritance

我正在尝试使用以下代码,但是我找不到足够好的文档来说明C ++如何处理公共继承和私有继承以允许我做我想要的事情。如果有人可以解释为什么我无法使用私有继承访问Parent::setSize(int)Parent::size或使用公共继承访问Parent::size。要解决此问题,我需要在Parent中使用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;
}

4 个答案:

答案 0 :(得分:14)

将父母更改为:

protected: int size;

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

将儿童改为:

class Child: public Parent

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

答案 1 :(得分:5)

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

此外,size中的Parent已经隐私了。一旦声明为private,则无论继承的类型如何,成员始终对基类保持私有。

答案 2 :(得分:0)

您无法访问其他类的私有数据成员。如果要访问超级类的私有属性,则应通过公共访问者或受保护的访问者进行访问。至于其余部分,请参阅@ casablanca的answer

答案 3 :(得分:0)

#include <iostream>
using namespace std;


class Parent {
private:
    int size;

public:
    void setSize(int s);

    int fun()  //member function from base class to access the protected variable 
    {
        return size;
    }
};

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

class Child : private Parent {
private:
    int c;

public:
    void print();


    using Parent::setSize; //new code line
    using Parent::fun;     //new code line
};

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

int main() {
    Child child;

    child.setSize(4);

    child.print();

    return 0;
}