c 程式設計的一些技巧

2021-04-22 01:27:06 字數 2114 閱讀 5158

第一點,使用全域性物件的建構函式在程式啟動前呼叫函式

有一些應用程式需要在主程式啟動前呼叫其它函式。如:轉態過程函式、登記

功能函式都是必須在實際程式執行前被呼叫的。最簡單的辦法是通過乙個全域性物件

的建構函式來呼叫這些函式。因為全域性物件都是在主程式開始前被構造,這些函式

都將會在main()之前返回結果。如:  

class logger

}; logger log; //乙個全域性例項

int main()

全域性物件log在main()執行之前被構造,log呼叫了函式activate_log()。從

而,當main()開始執行時,它就可以從log檔案中讀取資料

第二點:指向成員的指標

乙個類有兩種基本的成員:函式成員和資料成員。同樣的,指向成員的指標也

有兩種:指向函式成員的指標和指向資料成員的指標。後則其實並不常用,因為類

一般是不含有公共資料成員的,僅當用在繼承用c寫的**時協調結構(struct)和

類(class)時才會用到。

指向成員的指標是c++語法中最難以理解的構造之一,但是這也是乙個c++最強

大的特性。它可以讓你呼叫乙個類的函式成員而不必知道這個函式的名字。這乙個

非常敏捷的呼叫工具。同樣的,你也可以通過使用指向資料成員的指標來檢查並改

變這個資料而不必知道它的成員名字。

指向資料成員的指標

儘管剛開始時,指向成員的指標的語法會使你有一點點的迷惑,但你不久會發

現它其實同普通的指標差不多,只不過是*號的前面多了::符號和類的名字,例:

定義乙個指向int型的指標:

int * pi;   

定義乙個指向為int型的類的資料成員:  

int a::*pmi; //pmi是指向類a的乙個int型的成員  

你可以這樣初始化它:  

class a

; int a::*pmi = & a::num;   

上面的**是宣告乙個指向類a的乙個int型的num成員並將它初始化為這個num

成員的位址.通過在pmi前面加上*你就可以使用和更改類a的num成員的值:  

a a1, a2;

int n=a1.*pmi; //把a1.num賦值給n

a1.*pmi=5; // 把5賦值給a1.num  

a2.*pmi=6; // 把6賦值給6a2.num  

如果你定義了乙個指向類a的指標,那麼上面的操作你必須用 ->*操作符代

替:  

a * pa=new a;

int n=pa->*pmi;  

pa->*pmi=5;   

指向函式成員的指標

它由函式成員所返回的資料型別構成,類名後跟上::符號、指標名和函式的參

數列表。舉個例子:乙個指向類a的函式成員(該函式返回int型別)的指標:

class a  

;  int (a::*pmf) ();  

上面的定義也就是說pmf是乙個指向類a的函式成員func()的指標.實際上,這

個指標和乙個普通的指向函式的指標沒什麼不同,只是它包含了類的名字和::符

號。你可以在在任何使用*pmf的地方呼叫這個函式  

func():

pmf=&a::func;

a a;

(a.*pmf)(); //呼叫a.func()  

如果你先定義了乙個指向物件的指標,那麼上面的操作要用->*代替:  

a *pa=&a;

(pa->*pmf)(); //呼叫pa->func()  

指向函式成員的指標要考慮多型性。所以,當你通過指標呼叫乙個虛函式成員

時,這個呼叫將會被動態**。另乙個需要注意的地方,你不能取乙個類的構造函

數和析構函式的位址。

第三點:以友元類宣告巢狀的類

當你以友元類宣告乙個巢狀的類時,把友元宣告放在巢狀類宣告的後面,而不

前面。

class a  

;  };

friend class b;//友元類宣告

}; 如果你把友元類宣告放在宣告巢狀類的前面,編譯器將拋棄友元類後的其它聲

明。   

C 語言中的一些程式設計技巧

1 如何對復合型別資料構造stl模版的比較函式。對於通用的stl演算法,比如一些排序演算法或比較演算法,都能夠自己定義比較函式。比如下面的形式 bool compare suitor a,suitor b stable sort suitors,suitors suitor count 1,comp...

C 一些技巧

一如果函式對傳入的指標引數進行修改,一定要把引數設定為指標的指標或者指標的引用 delete the first occurrence of the node which value equals item in a single linked list void delete node head,...

整理一些提高C 程式設計效能的技巧

1 使用stringbuilder代替使用string 連線符 說明 string類物件是不可變的 唯讀 一旦建立該物件,就不能修改該物件的值。物件string物件的重新賦值,本質上是重新建立了乙個string物件並將新的值賦值給該物件。如果字串存在較多次的拼接時候,最後使用stringbuilde...