優勢:
(1)靜態資料成員沒有進入程式的全域性命名空間,因此不存在程式中其他全域性命名衝突的可能性。
(2)使用靜態資料成員可以隱藏資訊。因為靜態資料成員可以是private成員,而全域性物件不能
無論是在建構函式初始化列表中初始化成員,還是在建構函式體中對它們賦值,最終結果都是相同的。不同之處在於,使用建構函式初始化列表初始化資料成員,沒有定義初始化列表的建構函式體中對資料成員賦值。
對於const和reference型別成員變數,它們只能夠被初始化而不能被賦值操作,因此只能使用初始化列表。
還有一種情況就是,類的建構函式需要呼叫其基類的建構函式的時候。
[cpp]view plain
copy
#include
using
namespace
std;
class
a ;
a(int
x):a(x){}
//帶引數的建構函式對a的初始化
void
printa()
};
class
b :
public
a void
printb()
};
intmain()
從上面程式中可以看到,如果在子類的建構函式中需要初始化子類的private成員,直接對其賦值是不行的,只有呼叫父類的建構函式才能完成對它的初始化。但在函式體內呼叫父類的建構函式也是不合法的,只有採用19行中的初始化列表呼叫子類的建構函式的方式。
輸出:
[plain]view plain
copy
a = 2
b = 3
[cpp]view plain
copy
#include
using
namespace
std;
class
test
void
func1();
static
void
func2();
};
void
test::func1()
void
test::func2()
intmain()
這個程式有兩個錯誤:
(1)**第9行不能初始化i
(2)**第21行,在靜態成員函式中呼叫了非靜態成員。
改正:
[cpp]view plain
copy
#include
using
namespace
std;
class
test
void
func1();
static
void
func2();
};
inttest::i = 1;
void
test::func1()
void
test::func2()
intmain()
輸出:[cpp]view plain
copy
1,2
1
c 物件導向程式設計(三)
一 委託和事件 c 中的委託類似於c或c 中的函式指標。使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的 而不必在編譯時知道將呼叫哪個方法。與c或c 中的函式指標不同,委託是物件導向 型別安全的,並且是安全的。宣告方法 屬性 委託修飾符 delegat...
物件導向三
public class test class staticdemo 我是靜態變數 我是靜態變數 我修改了靜態變數public class test class singleton private static singleton singleton newsingleton public stat...
C 物件導向(三)多型
物件的多種形態 辛巴是獅子 辛巴是動物。animal xinba new lion 行為的多種形態 同樣的行為,但是表現形式不同。也就是說方法簽名一樣,方法體不同。簽名在這裡指的是方法名 引數以及返回值 行為的多型體現為方法的重寫 隱藏 過載 隱藏是實現多型的基本方法之一。class program...