C++公有繼承,保護繼承,私有繼承的區別
1.公有繼承–public
公有繼承時,對基類的公有成員和保護成員的訪問屬性不變,派生類的新增成員可以訪問基類的公有成員和保護成員,但是訪問不了基類的私有成員。派生類的物件只能訪問派生類的公有成員(包括繼承的公有成員),訪問不了保護成員和私有成員。
#include <iostream>
using namespace std;
class Base
{
public:
Base(int nId) {mId = nId;}
int GetId() {mId++;cout<< mId<<endl;return mId;}
protected:
int GetNum() {cout<< 0 <<endl;return 0;}
private:
int mId;
};
class Child : public Base
{
public:
Child() : Base(7) {;}
int GetCId() {return GetId();} //新增成員可以訪問公有成員
int GetCNum() {return GetNum();} //新增成員可以訪問保護成員
//無法訪問基類的私有成員
protected:
int y;
private:
int x;
};
int main()
{
Child child;
child.GetId(); //派生類的物件可以訪問派生類繼承下來的公有成員
//child.GetNum(); //無法訪問繼承下來的保護成員GetNum()
child.GetCId();
child.GetCNum(); //派生類物件可以訪問派生類的公有成員
//child.x;
//child.y; //無法訪問派生類的保護成員y和私有成員x
return 0;
}
2.保護繼承–protected
保護繼承中,基類的公有成員和保護成員被派生類繼承後變成保護成員,派生類的新增成員可以訪問基類的公有成員和保護成員,但是訪問不了基類的私有成員。派生類的物件不能訪問派生類繼承基類的公有成員,保護成員和私有成員。
class Child : protected Base
{
public:
Child() : Base(7) {;}
int GetCId() {return GetId();} //可以訪問基類的公有成員和保護成員
int GetCNum() {return GetNum();}
protected:
int y;
private:
int x;
};
int main()
{
Child child;
//child.GetId();//派生類物件訪問不了繼承的公有成員,因為此時保護繼承時GetId()已經為 protected型別
//child.GetNum(); //這個也訪問不了
child.GetCId();
child.GetCNum();
return 0;
}
3.私有繼承–private
私有繼承時,基類的公有成員和保護成員都被派生類繼承下來之後變成私有成員,派生類的新增成員可以訪問基類的公有成員和保護成員,但是訪問不了基類的私有成員。派生類的物件不能訪問派生類繼承基類的公有成員,保護成員和私有成員。
class Child : private Base
{
public:
Child() : Base(7) {;}
int GetCId() {return GetId();} //可以訪問基類的公有成員和保護成員
int GetCNum() {return GetNum();}
protected:
int y;
private:
int x;
};
int main()
{
Child child;
//child.GetId();//派生類物件訪問不了繼承的公有成員,因為此時私有繼承時GetId()已經為 private型別
//child.GetNum(); //派生類物件訪問不了繼承的保護成員,而且此時私有繼承時GetNum()已經為 private型別
child.GetCId();
child.GetCNum();
return 0;
}
4.總結
不管是哪種繼承方式,派生類中新增成員可以訪問基類的公有成員和保護成員,無法訪問私有成員。而繼承方式影響的是派生類繼承成員訪問屬性,而使用友元(friend)可以訪問保護成員和私有成員。
派生類物件的訪問許可權
相關推薦
C++中類的三種繼承方式public(公有繼承)、protected(保護繼承)、private(私有繼承)之間的差別(附思維導圖)【轉】
(轉自:https://blog.csdn.net/coco56/article/details/80467975) 注:若不指明繼承方式,則預設是私有繼承。 一:對於公有繼承(public)方式: 基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的p
真實模式,保護模式,虛擬8086模
下面按照這三種模式出現的先後時間順序來解釋 1. 真實模式 在早期的8086 CPU時,就是工作在這種模式。為了相容性,後來所有的CPU在開機時,最先都是執行在真實模式下。 1)在這種工作模式下,因為只有20根地址線,所以CPU的定址空間最大為1M 2)真實模式只支援單任務
公有鏈、聯盟鏈、私有鏈區別
1、公有鏈: 公有鏈是世界上任何人都可以訪問讀取的、任何人都可以傳送交易並且如果交易有效的話可以將之包括到區塊中的、以及任何人都能夠參與與其共識過程的區塊。 優點:所有交易資料公開、透明,無法篡改。 缺點:低吞吐量(TPS),交易速度慢。 2、聯盟鏈:(代表:超級賬本
C++繼承:公有,私有,保護(轉)
情況 pre mes 派生類 它的 保持 ++ col ble 公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持
c++ 多繼承 公有,私有,保護
昨天學習三種繼承方式,有些比喻十分形象,特此分享。 首先說明幾個術語: 1.基類 基類比起它的繼承類是個更加抽象的概念,所描述的範圍更大。所以可以看到有些抽象類,他們設計出來就是作為基類所存在的(有些名字裡面有abstract的)。 基類也叫父類,雖然本人覺得這個比喻並不恰當。因為實際
C++ 公有(public)繼承,私有(private)繼承,保護(protected)繼承
公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被
C++繼承:公有,私有,保護
公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類
C++公有繼承,保護繼承,私有繼承的區別
1.公有繼承–public 公有繼承時,對基類的公有成員和保護成員的訪問屬性不變,派生類的新增成員可以訪問基類的公有成員和保護成員
公有繼承,私有繼承,保護繼承的區別
一個子類繼承父類時,可按照public、private和protected方式繼承父類,每種繼承方式的區別如下: 1) public繼承方式 基類中所有public成員在派生類中為public屬性;基類中所有protected成員在派生類中為protected屬性;基類
關於公有繼承,保護繼承和私有繼承
假設現在有一個名叫大地主的類,他有下面三個成員:公有成員:一塊空地保護成員:傳家寶私有成員:QQ號所謂公有成員,就是你可以和大地主商量,讓他把空地租給你,對外說的時候,你要說清楚你這個地是大地主的一塊空地,也就是:大地主.一塊空地傳家寶當然是只給其後代(派生類)的,其他人要用
c++公有繼承、保護繼承和私有繼承
C++中的繼承方式有:public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。(1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的publi
C++ 公有繼承、保護繼承、私有繼承的區別
1)基類成員對派生類的可見性 1. 公有繼承(public) :基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。 2. 私有繼承(private) :基類的公有成員和保護成員都作為派生類的私有
C++之共有繼承、保護繼承、私有繼承
nbsp inf ima int void 不能 stream cout turn 1.封裝,public,private作用就是這個目的。 類外只能訪問public成員而不能方位private成員; private成員只能被類成員和友元訪問; 2.繼承,prote
c++繼承和組合,多型,虛擬函式(c++後期繫結的本質)
組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找
C#的一段經典程式碼,查詢當前程式所有繼承或實現自指定類的子類。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace FWJB_S
C/C++|Qt工作筆記-4種方法判斷當前物件(類)名或標識(繼承發,typeid法,元物件className()法,Q_CLASSINFO法)
回想起3個月前,剛剛參加工作也做過類似的筆記,但只有2種方法,估計剛畢業沒有什麼墨水,經過3個月時間又多了2種方法: 這些方法都可用於RTTI 第一個方法是繼承發(C++中很推薦用這個,感覺用這個結構會很清晰): 執行截圖如下: 原始碼如下: #
如果類a繼承類b,實現介面c,而類b和介面c中定義了同名變數,請問會出現什麼問題?(瞬聯)
如果類a繼承類b,實現介面c,而類b和介面c中定義了同名變數,請問會出現什麼問題?(瞬聯)interface A{ int x = 0;}class B{ int x =1;}class C extends B implements A{
C/C++基礎----用於大型程式的工具(異常處理,名稱空間,多重繼承)
獨立開發的子系統間協同處理錯誤的能力 使用各種庫(可能包含獨立開發的庫進行協同開發的能力) 對比複雜的應用概念建模的能力 異常處理 異常將問題的檢測和解決過程分離開 當執行一個throw之後,程式控制權轉移到了與之匹配的catch 控制權的轉移有兩個重要的含義 1沿著呼叫鏈的函式可能會提早退出 2一旦程式
node - 非同步執行,在佇列的底部,es5,es6公有繼承,node中util模組實現繼承和util模組的其他常用方法(很重要)
//非同步的,在當前佇列的底部 process.nextTick(function(){ console.log("1") }) //第二個佇列中 setImmediate(function(){ console.log("222") }) setTimeout(f
公有、私有、保護 的定義和繼承
C++,public、protected、private,簡短總結: 1、public:類內、類的物件;派生類內、派生類物件--->>均可訪問。 2、protected:類內、派生類內--->>可以訪問;類的物件、派生類的物件-->>不