我正在尝试使用以下代码,但是我找不到关于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作为父级进行操作,因此它应该是公共继承.
使用私有继承时,基类的所有公共成员和受保护成员在派生类中变为私有.在您的示例中,setSize变为私有Child,因此您无法从中调用它main.
此外,size已经是私人的Parent.一旦声明为private,成员始终保持对基类的私有,而不管继承的类型如何.