C 標頭檔案與類的宣告

2021-10-07 16:11:26 字數 2528 閱讀 9481

complex.h

1、防衛式宣告

#ifndef complex//告訴編譯器曾經沒有

#define complex

。。。。

#endif

作用:發展乙個複數,把它放在標頭檔案中,因為很多程式要用到這個標頭檔案,include"complex",當第一次include這個標頭檔案後,編譯器就會進入標頭檔案中,並且定義_complex_,這個就定義好了,在第二次include時,就不需要再進入標頭檔案定義了,因為編譯器已經有_complex_了,避免了重複的include含入 的動作。

header(標頭檔案)布局

#ifnedf _complex_

#define _complex_

//-----------------第一部分:前置宣告-----------------

#include

class

ostream

;class

complex

;complex&

_doapl

(complex* ths,

const complex& r)

;//----------------第二部分:類宣告----------------------

class

complex

;//----------------第三部分:類定義-----------------------

complex::function...

.#endif

2、inline函式

在類內直接宣告定義的函式不用加inline就是內聯函式了,只是如果函式在類內只是宣告,在外面定義,為了把他寫成內聯函式,需要加inline關鍵字。

3、訪問級別(access level)

public、private、protected

private:資料的部分,需要封裝,把資料很好的包裹起來。預設

public:大部分函式,需要被使用

protected:

4、建構函式(constructor)

當你需要建立乙個物件,有乙個函式會自動被呼叫起來

特點:(1)建構函式名稱必須與類的名稱一致

(2)沒有返回型別,因為建構函式就是為了建立物件,不能改變,所以不必謝,也就沒有返回值。

注意:complex (double r=0;double i = 0):re®,im(i)//這一行只有建構函式有,叫做初值列,初始列,把r設給re,i設給im,其實放到本體上也行,為什麼呢?簡單講就是乙個變數數值的設定兩階段,初始化和賦值,以上是初始化,這樣做就是為了直接初始化,如果放在本體中,其實是有點初始化晚了。就是效率上會好一些。

(3)不可能在類中去呼叫建構函式。對應的也有乙個析構函式,class有帶指標的和不帶指標的,不帶指標的就不需要析構函式

(4)建構函式可以有很多個overlording(過載),但是過載的函式不能在函式名後面加const,這樣就衝突了,為什麼能過載?在類中函式名過載,但是在編譯器看來,經過編譯之後的結果其實是不同的函式的。注意:在編寫函式過載時,需要注意函式在呼叫的時候不能有衝突,使得編譯器無法判斷。

(5)什麼情況可以啊建構函式放在private區中?

有一些設計模式可以放在裡面,但目前為止不要放。

5、const member function(常量成員函式)

double real() const{};//const放在函式後面。

a:有什麼用呢?

q:當要列印一些東西的時候,裡面的東西是不改變的,所以可以加const作為常量成員函式。

6、引數傳遞:pass by value & pass by reference(to const)

const reference(例如:const complex&):表示傳入的引用是不能改的。引數傳遞盡量傳引用,因為速度更快。

7、friend(友元)

在語言中:朋友可以來拿,指的是資料。

例如:在private中的資料不能通過外部來取,

friend complex& __doapl(complex*,const complex&);//宣告

//定義

inline complex&

__doapl(complex* ths,const complex& r)

自由取得friend的private成員,這樣就可以直接取得私有資料,而不用通過呼叫函式取得。但是friend也在一定程度上打破了c++的封裝,所以可以進行選擇,選用朋友這種方式或者通過呼叫函式。

8、相同class 的各個object互為friend(友元)

也就是例如乙個student的類,其中的成員資料報括姓名,學號等。

建立了三個物件,s1,s2,s3。s3中的成員函式可以直接呼叫s2中的私有的成員資料。為什麼呢?

答案也就是這乙個小標題的說法。

9、class body外的各種定義

什麼情況用pass by reference

什麼情況用return by reference

注意:返回引用的時候,函式中的返回的引用在程式完成後仍然存在才行,不然得到的是壞東西。

c 前置宣告與標頭檔案引用

優點 1.c 前置宣告,可以節約預處理器的展開時間,也就是在編譯的時候速度是增快了,但是伴隨著很多坑。2.當被前置宣告的類改動後,只需要編譯包含改動類標頭檔案的原始檔,所有使用了前置宣告的原始檔不需要改動 體現1.所有引用testb.h 的其他 cpp檔案不用再去包含 tem a 與 util 這倆...

C 模板類與標頭檔案

今天將模板類函式分成了宣告和定義兩個檔案 模板類的宣告 pragma once ifndef find item define find tiem template const elemtype find item const elemtype first,const elemtype last,c...

C 標頭檔案與C標頭檔案

include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 include ...