C 被忽視語言點總結

2021-06-06 02:38:07 字數 2935 閱讀 2686

1、#define pi 3.1415926

缺點:define巨集定義只在預編譯的時候進行字元置換,預編譯之後,程式中不再有pi這個識別符號,pi不是變數,沒有型別,不占用記憶體單元,也就意味著不能用指標。

替代方法:const float pi 3.1415926

利用const就可以宣告乙個常量。

2、c++之所以要加入引用主要是利用它作為函式引數,以擴充函式傳遞資料的能力。

3、可用常量或表示式對引用進行初始化,但此時必須用const宣告。

如:  int i=5;

const int &a=i+5;

因為編譯系統會生成乙個臨時變數,用來存放i+5的值,引用的是該臨時變數的值。即  temp=i+5;   int &a=temp;

若不加上const則當a改變的時候,只能改變temp的值,不會影響到i,所以為了避免使用者犯錯誤(經常會認為引用會改變原值),所以就乾脆宣告為const,從而避免的這種錯誤。

4、內建函式inline:可以提高執行效率,因為呼叫乙個函式的時間遠遠大於小規模函式體中全部語句的執行時間。

用內建函式可以達到用#define定義帶參巨集的目的。如:

關鍵是內建函式不會是簡單的**替換,他會自己加上括號;但define就不能

# define sum(x,y) x+y

inline sum(int x,int y)

5、在類內部定義的函式預設為inline(內建函式),也可以省略不寫;但在類的外部定義的函式就不是內建函式,除非你顯示的宣告。另外如果你在類外定義了內建函式,則必須將類定義和成員函式的定義放在同乙個檔案中。因為編譯器是按照乙個檔案乙個檔案編譯的,內建函式在另乙個檔案會導致編譯錯誤。但這樣就不利於資訊隱蔽。

另外,在類中不論是否用inline宣告,都不會占用物件的儲存空間。inline的作用是在呼叫該函式時,將函式**複製插入到函式呼叫點;如不用inline則流程會轉去函式的**段的入口位址,執行完以後再返回程式,類似於中斷一樣。

6、應該注意區分什麼時候用作用域運算子「::」,什麼時候用成員運算子「.」。

在定義類成員函式的時候、在使用某個資料成員需要進行限定的時候用"::」。如: int compare::max()     或cout《在使用乙個物件的成員時用「.」。如stud1.getdata()

7、類的建構函式是不能被使用者顯式呼叫的。另外,乙個類只能有乙個預設建構函式。

如  

class box

8、析構函式的作用並不是刪除物件,而是在撤銷物件占用的記憶體之前完成一些清理工作,是這部分程式記憶體可用系統使用。

9、對於同一類儲存類別的物件而言,遵守「先構造後析構」的原則;如

同一類儲存

stud stud1;

stud stud2;

不同類儲存

------------------------------

stud stud1;

complex com1;

但由於作用域和儲存類別的不同,不同類的物件析構函式呼叫的順序是不確定的。不要想當然的認為。

10、指向類成員函式的指標與普通函式指標的定義區別

普通函式指標

類成員函式

fun()//已定義的乙個函式

void (*p)();

p=fun;

time//是乙個類

void (time:: *p)();

p=&time::gettime;//沒有()只有函式名

11、const宣告總結

const int b=5; //定義乙個常量

const time t1(12,35,34);//定義乙個常物件

int gettime() const;//定義乙個常成員函式

const int *p=&a;//指向常量的指標

time * const p=&t1;//指向物件的常指標

關鍵是看清楚const關鍵字舉例什麼較近。

12、非靜態成員函式有this指標,但是靜態成員函式沒有this指標。靜態成員函式主要用來訪問靜態成員。

13、函式模板和類模板

函式模板

類模板template

t max(t a,t b)

使用max(15,16);

template

class compare

t max()

………}

類外宣告成員函式

template

t compare ::compare()

使用compare max(6,8);

14、物件陣列的初始化

student stud[3]=;

class b:virtual a

;class c:virtual a

;class d:public b,public c

//基類也要寫上

…};1、應該把所有基類的直接基類都用virtual來宣告;

2、c++編譯系統只執行最後的派生類對虛基類的建構函式的呼叫,這就保證不會對基類進行多次初始化

16、靜態多型性是通過函式過載來實現的;動態多型性是通過虛函式來實現的。

要明白虛函式的作用過成:先在基類中定義乙個虛函式,然後定義其他派生類;當類定義完了以後,定義乙個指向基類的指標,通過該指標的不同指向來呼叫不同派生類的函式。

17、++過載  類的成員函式

前置++

後置++

time time::operator ++ ()

return *this;

}time time::operator ++ (int)

return temp;

} 18、>>/《過載  類的友元函式

friend ostream& operator <<(oatream &,complex&);   //宣告

……ostream &operator <<(ostream &output,complex &c)

5、型別轉換函式 operator double()

C 被忽視語言點總結

最近考試,就忙著把c 又看了一遍,本來以為自己都知道了,結果看完以後唏噓不已。然後把知識點總結一下。這些知識點都是當時感覺不重要,現在一看卻恰恰相反。1 define pi 3.1415926 缺點 define巨集定義只在預編譯的時候進行字元置換,預編譯之後,程式中不再有pi這個識別符號,pi不是...

sql 容易被忽視的點

1 dual select查詢語句只有 select 就可以,但為了規範,湊結構,可以加個 dual 例 select now from dual 這個概念是oracle中的。在mysql中可寫可不寫。2 drop,delete truncate 的區別drop用於刪除資料庫,資料表的字段,刪除表 ...

c 容易被忽視的細節序列 (一)

1.std size t numdigits int number 函式返回型別被定義為std size t 這表示size t是被定義在std命名空間之內。std幾乎是所有c 標準程式庫元素的棲身之處。另外size t只是乙個typedef,是c 計算個數時用的不帶正負號型別 unsigned 例...