C ++ - 具有私有参数的构造函数继承

时间:2014-01-15 07:51:02

标签: c++ inheritance parameters

您好我使用继承构造函数时遇到问题。我无法访问父母的字段。

这是我的MyClass.h:

#include "Parent.h"
class MyClass : public Parent {
  public:
    MyClass(string otherParameters);

};

这是MyClass.cpp:

#include MyClass.h
MyClass::MyClass(string otherParameters) : Parent() {
    parent_field = "something";
}

字段otherParameters不是来自Parent,仅属于MyCLass类。 编译器弹出错误并告诉我Parent :: parent_field是私有的。我不知道,我的类MyClass应该继承这个parent_field属性,为什么我不能访问它?感谢

3 个答案:

答案 0 :(得分:1)

MyClass只能访问Parentpublicprotected个成员。如果parent_fieldParent的私人成员,则MyClass无法看到它(除非您声明MyClassParent的朋友,这将是奇怪的设计)。

您希望能够通过parent_field构造函数设置Parent

struct Parent
{
  Parent(const std::string& s) : parent_field(s) {}
  // other code as before
};

然后在MyClass的构造函数中使用它:

MyClass::MyClass(string otherParameters) : Parent("something") {}

这会将Parent::parent_field设置为"something"

答案 1 :(得分:1)

这是一个good question discussing access modifiersprivateprotectedpublicprivate只有您的班级可见,而不是任何从其继承的人。您需要做的是在parent_field中声明Parent受保护,或者使用其他方式访问它,例如使用setter或构造函数参数。

此外,您将其作为public继承的事实意味着,从MyClass继承的任何人都不会拥有Parent的受限制视图,但Parent仍然会决定它想要揭示什么,你如何继承它不会改变它。您唯一能做的就是限制继承MyClass的类如何能够从Parent访问内容,但您无法删除已经施加的任何限制。

答案 2 :(得分:1)

因为它是private。类的private部分中的函数和变量仅适用于该类和该类。如果您希望能够在继承的类中使用函数或变量,但仍然不允许它们为public,则必须将它们放在protected部分中。