【问题标题】:C++ - Constructor Inheritance with private parametersC++ - 带有私有参数的构造函数继承
【发布时间】:2014-02-03 14:09:02
【问题描述】:

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

这是我的 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 属性,那么为什么我不能访问它呢?谢谢

【问题讨论】:

    标签: c++ inheritance parameters


    【解决方案1】:

    MyClass 只能访问Parentpublicprotected 成员。如果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"

    【讨论】:

      【解决方案2】:

      这是good question discussing access modifiersprivateprotectedpublicprivate 只对你的类可见,对继承自它的任何人都不可见。您需要做的就是在Parent 中声明parent_field protected,或者通过其他方式访问它,例如使用setter 或构造函数参数。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-30
          • 2018-03-31
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          • 2015-08-22
          • 1970-01-01
          相关资源
          最近更新 更多