復(fù)合:has a
構(gòu)造由內(nèi)而外:
Container的構(gòu)造函數(shù)首先調(diào)用component的default(默認(rèn))構(gòu)造函數(shù)枪萄,然后再執(zhí)行自己的構(gòu)造函數(shù):
Container::container(...):component(){...};
析構(gòu)由外而內(nèi):
Container的析構(gòu)函數(shù)首先析構(gòu)自己物咳,然后再析構(gòu)component:
Container::~container() {... ~component()}抡句;
Delegation:has a (composition by reference)
繼承:is a
構(gòu)造由內(nèi)而外:
Derived的構(gòu)造函數(shù)首先調(diào)用Base的default(默認(rèn))構(gòu)造函數(shù)牡肉,然后再執(zhí)行自己的構(gòu)造函數(shù):
Derived::Derived(...):Base(){...}巢掺;
析構(gòu)由外而內(nèi):
Derived的析構(gòu)函數(shù)首先析構(gòu)自己,然后再析構(gòu)Base:
Derived::~Derived() {... ~Base()}片仿;
Base class 的析構(gòu)必須是虛析構(gòu)
非虛函數(shù):你不希望derived class重新定義
虛函數(shù):你希望derived class重新定義纹安,并且有默認(rèn)定義
純虛函數(shù):沒有默認(rèn)定義,derived class必須重新定義
繼承函數(shù)是繼承調(diào)用權(quán)
子類對(duì)象調(diào)用父類函數(shù):
1.conversion fnction:轉(zhuǎn)換函數(shù)
Class Fraction
{
public:
Fraction(int num,int den=1):m_numerator(num),m_denominator(den){}
operator double() const {
return (double)(m_numerator/m_denominator);
}
private:
int numerator;
int denominator;
};
Non-explicit-one-argument ctor:
Class Fraction{
Fraction operator +(const Fraction& f){
Return Fraction(...);
...}