繁体   English   中英

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

[英]C++ - Constructor Inheritance with private 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属性,所以为什么我不能访问它? 谢谢

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

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

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"

这是讨论 privateprotectedpublic 访问修饰符的一个好问题 private仅对您的类可见,对继承它的任何人都不可见。 您需要做的是在Parent声明受保护的parent_field ,或以其他方式访问它,例如使用setter或构造函数参数。

同样,将其作为public继承的事实意味着,从MyClass继承的任何人都不会具有Parent的受限视图,但是, Parent仍然可以决定要公开的内容,您如何继承它并不会改变这一点。 您唯一可以做的就是限制继承MyClass类如何访问Parent ,但是您不能删除已施加的任何限制。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM