C 物件導向 三

2021-08-07 08:08:57 字數 1777 閱讀 6968

優勢:

(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...