【C++基礎】公有,私有和受保護的繼承
對類所繼承的成員的訪問由基類中的成員訪問級別和派生類派生列表中使用的訪問標號共同控制。
派生類可以進一步限制但不能放鬆對所繼承的成員的訪問。
- public inheritance:基類成員保持自己的訪問級別:基類的public成員為派生類的public成員,基類的protected成員為派生類的protected成員。
- protected inheritance:基類的public和protected成員在派生類中為protected。
- private inheritance:基類的所有成員在派生類中為private成員。
示例:
class Base
{
public:
void basemen(); // public member
protected:
int i; // protected member
// ...
};
struct Public_derived : public Base
{
int use_base() {return i;} // ok; derived classes can access i
// ...
};
struct Private_derived : private Base
{
int use_base() {return i;} // ok; derived classes can access i
};
Base b;
Public_derived d1;
Private_derived d2;
b.basemen(); // ok;
d1.basemen(); // ok; basemen is public in the derived class
d2.basemen(); // error; basemen is private in the derived class
struct Derived_from_Private : public Private_derived
{
// error; Base::i is private in Private_derived
int use_base() {return i;}
};
struct Derived_from_Public : public Public_derived
{
// ok; Base::i remains protected in Public_derived
int use_base() {return i};
};
private inheritance:
- private繼承是實現繼承,不是介面繼承;
- 如果classes之間的繼承關係是private,編譯器不會自動將一個derived class物件轉換為一個base class物件;
- private繼承並不意味著is-a關係;
- private繼承在軟體設計層面上沒有意義,其意義只及於軟體實現層面;
class Base { };
class Derived : private Base { };
void test(Base* rhs){}
Base b;
Derived d;
test(&b); // ok;
test(&d); // error;
相關文章
- C++中公有繼承、保護繼承、私有繼承的區別C++繼承
- 【c++基礎】菱形繼承問題C++繼承
- python 基礎之繼承、重寫、多繼承Python繼承
- C++繼承C++繼承
- JavaScript基礎: 類與繼承JavaScript繼承
- java繼承基礎詳解Java繼承
- C++中的繼承C++繼承
- javascript基礎-原型鏈與繼承JavaScript原型繼承
- corejava基礎知識(1)-繼承Java繼承
- [c++] 繼承和多型整理二C++繼承多型
- C++ | 類繼承C++繼承
- 『無為則無心』Python物件導向 — 55、多層繼承和繼承中的私有成員Python物件繼承
- C++ class 和 struct 可以相互繼承嗎C++Struct繼承
- [打牢基礎系列]JavaScript的類與繼承JavaScript繼承
- C++繼承體系C++繼承
- c++中的繼承關係C++繼承
- 區塊鏈安全如何保證?公有私有哪家強?區塊鏈
- JS基礎-完美掌握繼承知識點JS繼承
- Java基礎之淺談繼承、多型Java繼承多型
- C++中封裝和繼承的訪問許可權C++封裝繼承訪問許可權
- C++ 整理15_繼承C++繼承
- C++ protected繼承意義C++繼承
- C++繼承時的修飾符C++繼承
- C++的核心特性:繼承機制C++繼承
- 玩家——受傷後的保護狀態
- C++,繼承,基類和派生類指標間賦值等知識C++繼承指標賦值
- 製作CocoaPods公有庫和私有庫
- C++學習筆記——C++ 繼承C++筆記繼承
- C++高階教程之繼承得本質:單繼承(一)C++繼承
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- 原型和繼承原型繼承
- javascript的原型和繼承JavaScript原型繼承
- 類的繼承和派生繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- c++語言中類的私有型別或保護型別成員變數C++型別變數
- es5繼承和es6類和繼承繼承
- 深刻理解php“繼承“、“私有屬性“、“$this指向“的關係PHP繼承
- GRASP之受保護的變化 - Kamil Grzybek
- C++ 多級繼承與多重繼承:程式碼組織與靈活性的平衡C++繼承