簡體   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