[英]C++ - Why does the default constructor work even in private inheritance
[英]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
只能訪問Parent
的public
成員和protected
成員。 如果parent_field
是Parent
的私有成員,則MyClass
無法看到它(除非您聲明MyClass
是Parent
的朋友,這是一個奇怪的設計)。
看起來您希望能夠通過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"
。
因為它是private
。 類的private
部分中的函數和變量僅可用於該類,並且僅可用於該類。 如果希望能夠在繼承的類中使用函數或變量,但仍不允許它們public
,則必須將它們放在protected
部分中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.