1.繼承與派生
繼承是使代碼可以複用的重要手段,也是面向對象程序設計的核心思想之一。簡單地說,繼承是指一個對象直接使用另一個對象的屬性和方法。繼承呈現了面向對象設計的層次結構,體現可由簡單到複雜的認知過程。C++中的繼承關係可以類比於父子關係,繼承一筆財產比白手起家容易得多,原始類稱爲基類(父類),繼承類稱爲派生類(子類),派生類也可被當做基類,被其他派生類再繼承。
繼承的方式有三種,分別是私有繼承(private),公有繼承(public),保護繼承(protect);定義格式如下:
class DeriveClassName:acess-label BassClassName{}
//類定 派生類名 :繼承方式 基類名{}
// ↓
// public.protected.private
2.繼承方式及訪問屬性
(1)公有繼承(public)
特點:繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象只能訪問基類中的public成員。
(2)私有繼承(private)
特點:繼承時基類中各成員屬性均變爲private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。
(3)保護繼承(protected)
特點:繼承時基類中各成員屬性均變爲protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。
轉自小鹹魚_的博客。
#include<iostream>
using namespace std;
class A
{
private:
int privatetedateA;
protected:
int protecteddateA;
public:
int publicdateA;
};
class B :public A
{
public:
void funct()
{
int b;
b=privatedateA; //error:基類中私有成員在派生類中是不可見的
b=protecteddateA; //true:基類的保護成員在派生類中爲保護成員
b=publicdateA; //true:基類的公共成員在派生類中爲公共成員
}
};
/
class C :private A
{
public:
void funct()
{
int c;
c=privatedateA; //error:基類中私有成員在派生類中是不可見的
c=protecteddateA; //true:基類的保護成員在派生類中爲私有成員
c=publicdateA; //true:基類的公共成員在派生類中爲私有成員
}
};
class D :protected A
{
public:
void funct()
{
int d;
d=privatedateA; //error:基類中私有成員在派生類中是不可見的
d=protecteddateA; //true:基類的保護成員在派生類中爲保護成員
d=publicdateA; //true:基類的公共成員在派生類中爲保護成員
}
};
int main()
{
int a;
B objB;
a=objB.privatedateA; //error:基類中私有s成員在派生類中是不可見的,對對象不可見
a=objB.protecteddateA; //error:基類的保護成員在派生類中爲保護成員,對對象不可見
a=objB.publicdateA; //true:基類的公有成員在派生類中爲公共成員,對對象可見
C objC;
a=objC.privatedateA; //error:基類中私有成員在派生類中是不可見的,對對象不可見
a=objC.protecteddateA; //error:基類的保護成員在派生類中爲私有成員,對對象不可見
a=objC.publicdateA; //error:基類的公有成員在派生類中爲私有成員,對對象不可見
D objD;
a=objD.privatedateA; //error:基類中私有成員在派生類中是不可見的,對對象不可見
a=objD.protecteddateA; //error:基類的保護成員在派生類中爲保護成員,對對象不可見
a=objD.publicdateA; //error:基類的公有成員在派生類中爲保護成員,對對象不可見
return 0;
}
源碼轉自 Joerrot的博客。
3.私有繼承和保護繼承
區別:
私有繼承的類中 只有派生類可以繼承 派生類的子類不可以繼承。
保護繼承的類中 派生類的成員函數和友元函數均可以向下繼承。