C 學習總結一

2021-06-18 09:48:59 字數 3597 閱讀 8205

1.  ifstream in ("a.txt");

a. for(int a; in >>a..)  //流一次讀入乙個字元

b. for(string str ; getline(in ,str);)..//流一次讀入一行

2. char的運算與int可是為一樣

3.char*(char串)和字串陣列型別不同,但是操作上基本一樣,都表示c-串的啟示位址(但是char*的結尾有個空字元,表示結束)

4. 

a. 逐字輸入  cin.get()

b.  逐行輸入 cin.getline()

5.  常量,eg:  const int a=7;  //編譯期間就可以確定

6. a.  int a[ ]=

sizeof(a);  //計算a 的空間大小

b.  sizepof(a[0])  //計算元素a[0]的空間大小,結果以位元組為單位

7.  vector,使用下標([n]),和inerator都可以進行操作

8. c++中cast強轉操作方式:

a.  int*  ip=(int*)&f;  //

b.  double ip=double(5);   //只有內建型別才有此種方式

9.  

a.  引用型別就是一種隱性指標,指標自身位址就是所操作的實體的位址,

b. 且與指標最大的區別是引用不能修改自身的位址,也就是說引用賦初值後就不能改變了

10.   *s++=*s2++  //後增量++就是在 本語句結束後執行的,所以雖然是先++後*,但是由於是後增++,所以s1,s2指標沒變

11.

vectoradd(..)

vectorc (a.szie);

reurn c;   //函式返回時,如果不是引用和指標,就要做對c進行copy,產生乙個臨時量,當函式被呼叫處的表示式結束後,該臨時量也就消失了

12. 函式的宣告和函式的指標

int g(int);  //函式的宣告可以省略引數名和函式體

int (*gp)(int) ;  //該函式指標為形參的型別是 int(*)(int);   這樣定義只是定義了乙個函式指標實體,並沒有定義函式指標的型別(定義函式指標型別要使用typedef)

typedef int (*fun) (int a);  //這樣才是宣告乙個型別為int(*) (int)的函式指標型別

13.  函式宣告的形式

a.  int a(int) //可以省略形參名,

b.  int  (int) //函式名和形參宣告都可以省略(成為無名函式)

// a只是一種函式的型別,b做函式的宣告,也做函式的型別

14.  bitset<100> *  p=new bitset<100>;

a.  p->set() //一般指標所指物件呼叫物件內部方法,成員

b.  所以不用對物件內部成員操作一樣先 (*p),然後操作

15.  棧空間很寶貴,大資料運算-->使用堆空間

16.     .cpp檔案中只對引用到的函式或者型別進行include

17.  全域性資料和函式一樣只能一次定義,但是可以多次宣告, 一般在標頭檔案中宣告為 : extend int n=8;

18.a.  const int a=3;  // 是檔案域的,可以在多個檔案中重複定義,但在同乙個檔案中不能重複定義

b.  extend  int  n=8;  //  是程式域,的就不能重複定義

19.  作用域就是名空間,

20.  對的作用域是整個程式範圍,使用new申請到的空間,

21.  c++中名空間的定義總是放入標頭檔案中,eg:

a1.h

namespace  a1;

#  endif  //標頭檔案衛士來防止重複宣告

b.  a中的全部定義都可以放入標頭檔案中,函式的實現(定義)除外,

c.  a中的定義都可以在不同的檔案中重新被定義,(因為屬於內部鏈結)

23.  常成員函式不改變物件的值,  void  print( ) const;

24. 

point a,b,c

point d=a+b+c  //過載的point型別的operator +,返回乙個臨時的point(a+b的值)參與與c的相加,當該行表示式結束時,該臨時point銷毀

25. count<26.  ostream & operator<<(ostream & o,const point & d)

return  o<< ..;     //過載<<,必須返回&(引用),否則會拷貝返回一臨時資料

27.  類和函式的實現與定義可以分開實現,

a. 但是型別實現的cpp中要包入相應要實現的類的標頭檔案,

b. 函式實現檔案cpp,中不需要包入相應的標頭檔案

28.  成員內聯函式,一般都直接寫在類定義內部

29.  靜態成員不能放在標頭檔案中,應放在類實現中,(類外實現)

30.  其實函式的實現放在任何cpp中都可以,但是要明確是為那個.h的函式進行的實現,如有同名的函式宣告則應該在實現的cpp中,加上名空間,

名空間::fun();

31.  date  g;  // 無參物件定義

date  f();// 返回類物件的無參函式宣告(是個函式的宣告),

32. 

a. 在建構函式體中,不能完成對常量成員和引用成員的初始化,

b.如果,建構函式的初始化器中沒有為成員進行初始化,也未在建構函式體中進行賦值,則呼叫該成員的預設建構函式進行構造

33. 靜態物件是檔案作用域物件

34. 指標的空間有型別:指標所指的空間只能放入與指標型別相同的資料,否則要動態強**  reinterpret_cast<..>

35.class silly    //a與b在模板例項化時,型別必須相同(因為是預編譯階段就要確定)

48. 使用

a.  static_cast<  >

dynamic_cast<  > //進行轉換操作比較安全,不會報錯,最多返回值為0

b.  但是用普通的強轉不會成功的話就會報錯

49.t*  const& max( t*  const& a, t*  const& b)

// t* (指標)加上&(引用).則直接使用實參指標,而不拷貝構造

//t*  const& a其實就是t型別指標的引用

50.

a.  形參  const int a //是字面常量,比如5,6

b. const  int&  a //為常量引用(是變數,只是限定該變數不能被改變)  ,*和&在型別定義時都緊跟型別後面(good!)

51.  模板本質不是型別,不能作為形參的型別

52. 模板鑄件可以視為類模板的子類模板,例如:

template

class a是template

class a的模板的鑄件

53.  異常

a. dynamic_cast的轉換型別,若為引用,則轉換失敗後丟擲bad_cast異常

b.  若轉換物件為指標,eg:dynamic _cast,轉換失敗後,返回0

54.  可以使用typeid進行型別比較,eg:

class a; 

a a;

if(typeid(a)==typeid(a))  //進行型別比較,可以是物件,指標或者引用

C 學習,總結一

接連幾天的陰雨天氣,現在感覺很悶熱,悶熱的讓人難受。不過現在正處於伏天,這樣的天氣也是正常的。今天學習了什麼新東西呢?來總結一下吧,一是加深一下印象,二是留下一段記憶。一 dll的匯出方式。這裡只把 貼出來了。extern declspec dllexport void msgbox wchar t...

c 學習總結一

詳見 靜態常量與非靜態常量的區別 在建立物件的時候,需要每個成員變數 非靜態 開闢記憶體空間,類變數 靜態變數 則是在類載入的時候就建立好了。用static修飾過的常量會存到常量池裡面。存入的方式是 先到常量池裡面尋找,看是否該常量已經存在,如果存在返回該常量的引用,不存在就在常量池裡面新建乙個常量...

C 模板學習總結(一)

最近公司接到乙個平台專案,平台中涉及到c 11和較多模板方面的 發現同事對c 模板部分的理解幾乎為零,也沒有人了解c 11的語法,所以做了幾次培訓,剛開始在c 11部分的講解尚可,模板部分的培訓效果可以說是一塌糊塗,幾乎沒有人能聽懂我在說什麼,兩次以後參加的人也是寥寥無幾了,事後總結了一下,感覺模板...