class a
}class b : public a
}//b的建構函式先由a的建構函式初始化a,然後執行a的建構函式體,接著初始化b,最後執行b的建構函式體
//派生類宣告時,宣告中包含類名但是不包含它的派生列表
class b : public a;//錯誤
class b;//正確
class a; //僅僅宣告了a類
class b : public a //錯誤,a類必須被定義
class
a {}
class
b : public a {}
b b;
a a(b);//實際上,呼叫的是拷貝建構函式,即a::a
(const
a&)a = b;//實際上,呼叫的是拷貝賦值運算子,即a::operator=(const
a&)
class a
virtual void f3()
}class b : public a
void f3()
}class c : public b
int main()
//輸出結果如下:
/**a's f2 is running.
b's f2 is running.
pointa->f2:a's f2 is running.
a's f3 is running.
b's f3 is running.
pointa->f3: b's f3 is running.
pointa = &a, pointa->f3: a's f3 is running.
*/
class a
class b : public a
//純虛函式的函式體定義在類的外部
void b::dosomething()
class b : public a
void visit(a& a)
void visit(b& b)
class basea
class a : public basea
class baseb
int f2(a a)
int f3(a a)
}class b : public baseb
}
struct base ;
struct dervied : base ;
dervied d;
base b;
b.memfcn();//呼叫base::memfcn
d.memfcn(10);//呼叫derived::memfcn
d.memfcn();//錯誤:引數列表為空的memfcn被隱藏了。因為derived定義了乙個名為memfcn的成員,編譯器找到這個名字後,就不再繼續查詢了。
d.base::memfcn();//正確,呼叫base::memfcn
class a
class b : public a
class base
class d : public base
//移動基類成員
d(d&& d):base(std::move(d))
}//如果按照如下定義,則拷貝出來的物件會很奇怪:它的base成員被賦予了預設值,而d成員的值則是從其它物件拷貝得來的。
d(const d &d)
//base::operator=(const base&)不會自動呼叫
d & d::operator=(const d &rhs)
class a
}class b
b(int j):i(j){}
}int main()
/**輸出結果:
the a's creater without parameter is used.
the a's creater without parameter is used.
b.i = 1
b2.i = 2
b.k = 15315 //k的值未定義
*/
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
C 物件導向程式設計
1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...
C 物件導向程式設計
物件導向程式設計 以物件為中心,將資料和方法封裝在一起。三要素 抽象繼承 多型 五個基本原則 單一職責原則 就乙個類而言,應該有且僅有乙個引起它變化的原因。開放 封閉原則 是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。黎克特制替換換原則 子類應當可以替換父類並出現在父類能夠出現的...