您好我使用继承构造函数时遇到问题。我无法访问父母的字段。
这是我的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属性,为什么我不能访问它?感谢
答案 0 :(得分:1)
MyClass
只能访问Parent
个public
和protected
个成员。如果parent_field
是Parent
的私人成员,则MyClass
无法看到它(除非您声明MyClass
是Parent
的朋友,这将是奇怪的设计)。
您希望能够通过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 modifiers,
private
,protected
和public
。 private
只有您的班级可见,而不是任何从其继承的人。您需要做的是在parent_field
中声明Parent
受保护,或者使用其他方式访问它,例如使用setter或构造函数参数。
此外,您将其作为public
继承的事实意味着,从MyClass
继承的任何人都不会拥有Parent
的受限制视图,但Parent
仍然会决定它想要揭示什么,你如何继承它不会改变它。您唯一能做的就是限制继承MyClass
的类如何能够从Parent
访问内容,但您无法删除已经施加的任何限制。
答案 2 :(得分:1)
因为它是private
。类的private
部分中的函数和变量仅适用于该类和该类。如果您希望能够在继承的类中使用函数或变量,但仍然不允许它们为public
,则必须将它们放在protected
部分中。