復合:has a
構造由內而外:
Container的構造函數首先調用component的default(默認)構造函數,然后再執行自己的構造函數:
Container::container(...):component(){...};
析構由外而內:
Container的析構函數首先析構自己,然后再析構component:
Container::~container() {... ~component()};
Delegation:has a (composition by reference)
繼承:is a
構造由內而外:
Derived的構造函數首先調用Base的default(默認)構造函數,然后再執行自己的構造函數:
Derived::Derived(...):Base(){...};
析構由外而內:
Derived的析構函數首先析構自己,然后再析構Base:
Derived::~Derived() {... ~Base()};
Base class 的析構必須是虛析構
非虛函數:你不希望derived class重新定義
虛函數:你希望derived class重新定義,并且有默認定義
純虛函數:沒有默認定義,derived class必須重新定義
繼承函數是繼承調用權
子類對象調用父類函數:
1.conversion fnction:轉換函數
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(...);
...}