1.1-day01-C++語言語法基礎
阿新 • • 發佈:2018-11-29
C++語言語法基礎
一、C++語言語法基礎(6)
1.從C到C++的過渡(1) 2.類和物件(2) 3.操作符過載(1) 4.繼承與多型(1) 5.異常和I/O流(1)
二、資料結構和演算法(3) 1.基本資料結構,堆疊、佇列、連結串列、二叉樹,實現和應用(2) 2.排序和查詢演算法(1)
三、模板和STL(3) 1.模板語法(1)
2.STL(2)
四、階段專案(2) 簡化的企業管理資訊系統(MIS)
第一課 從C到C++的過渡 一、背景介紹 算盤 - 面向硬體的程式設計 電子計算機 - 機器語言的程式設計1010 - 組合語言的程式設計ADD - 高階語言的程式設計Fortran
printf ("%d", 12);
- 結構化程式設計C/PASCL
順序、分支、迴圈、函式
- 面向物件的程式設計C++/Java/C#
- 面向問題的程式設計
1960 - Algol 60,演算法語言,遠離硬體,不適合進行系統開發
1963 - 劍橋大學,CPL,在Algol 60的基礎上增加對系統開發的支援,複雜,不易掌握,不易使用
1970 - MIT,BCPL,CPL的精華版,易學易用,太慢,不實用
1972 - Ken Thomposon,B語言,通過執行時支援優化BCPL的效能,缺少型別
1973 - Dennis Ritchie,C語言,用C重新實現UNIX核心
1978 - 《The C Programming Language》,第一個C語言的事實標準
1989 - ANSI C,C89
1990 - ISO C, C90
1999 - ISO C 修訂,C99
197X - Bajarne Stroustrup,simula早期的面嚮物件語言,效能低下,B語言。
1979 - 貝爾實驗室,多核UNIX系統模擬,Cpre,通過擴充套件巨集為C語言增加類似simula的面向物件機制。C with Class:
simula - 類
Alogo 68 - 操作符過載
Ada - 模板、名字空間
Smalltalk - 引用、異常
C是C++的子集,C++是對C的擴充套件。
1983 - C++命名
1985 - CFront 1.0,第一款商用C++編譯器
1987 - GNU C++
1990 - Borland C++
1992 - Microsoft C++,IBM C++
1998 - ISO C++98
2003 - ISO C++03
2011 - ISO C++2011/C++11/C++0x
二、C++語言的使用領域: 1.遊戲開發:強建模能力,效能高。 2.科學計算:FORTRAN,C++演算法庫。 3.網路和分散式:ACE框架。 4.桌面應用:VC/MFC,Office,QQ,多媒體 5.作業系統和裝置驅動:優化編譯器的發明使C++在底層開發方面可以和C向媲美。 6.移動終端 既需要效能,同時又要有面向物件的建模。
三、C++比C更豐富 1.支援面向物件,將問題域和方法域統一化。巨集觀面向物件,微觀面向過程。 2.支援泛型程式設計。 int add (int a, int b) { ... } template<typename T> T add (T a, T b) { ... } 3.支援異常機制。 int func (void) { ... } int main (void) { if (func () == -1) { 錯誤處理; } } 4.操作符過載
四、第一個C++程式 1.編譯器:g++,如果用gcc需要帶上-lstdc++,指定其使用標準c++的執行庫。 2.原始檔副檔名:.cpp/.cc/.C/.cxx/.c++,最好用.cpp 3.標頭檔案:#include <iostream> 大多數標準庫標頭檔案都沒有.h字尾。 4.輸出:cout - 標準輸出物件 輸入:cin - 標準輸入物件 插入運算子:<< 提取運算子:>> 5.std:所有標準庫的函式、物件、型別都位於std名字空間中。
五、名字空間 1.對程式中的識別符號(型別、函式、變數)按照某種邏輯規則劃分成若干組。 2.定義名字空間 namespace 名字空間名 { 名字空間成員; } 3.使用名字空間 1)作用於限定符:名字空間名::名字空間成員,表示訪問特定名字空間中的特定成員。 2)名字空間指令: using namespace 名字空間名; 在該條指令之後的程式碼對指令所指名字空間中的所有成員都可見,可直接訪問這些成員,無需加“::”。 3)名字空間宣告: using 名字空間名::名字空間成員; 將指定名字空間中的某個成員引入當前作用域,可直接訪問這些成員,無需加“::”。 4.匿名名字空間 如果一個識別符號沒有被顯示地定義在任何名字空間中,編譯器會將其預設地置於匿名名字空間中。對匿名名字空間中的成員通過“::名字空間成員”的形式訪問。 5.名字空間合併 6.名字空間巢狀 namespace ns1 { namespace ns2 { namespace ns3 { void foo (void) { ... } } } } ns1::ns2::ns3::foo (); using namespace ns1::ns2::ns3; foo ();
六、C++中的結構、聯合和列舉 1.結構 1)定義結構型變數時,可以省略struct關鍵字。 2)結構內部可以定義函式——成員函式。 3)sizeof (空結構) -> 1 2.聯合 增加了匿名聯合的概念。借用聯合語法形式,描述一些變數在記憶體中的佈局方式。 3.列舉 列舉是一個獨立的資料型別。 C: enum E {a, b, c}; enum E e; e = a; e = 1000; C++: enum E {a, b, c}; E e; e = a; e = b; e = c; e = 1000; // ERROR ! e = 1; // ERROR !
七、C++的布林型別 bool b = true; b = false; cout << sizeof (b) << endl; // 1 b = 100; b = 1.234; b = "hello"; b = 'A';
八、C++中的運算子別名 && - and || - or & - bitand ^ - xor { - <% } - %> [ - <: ] - :>
九、C++中的函式 1.過載:在同一個作用域中,函式名相同,引數表不同的函式,構成過載關係。 C++編譯器會對程式中的函式做換名,將引數表中的型別資訊匯合到函式名中,以保證函式名的唯一。 通過extern "C",可以要求編譯器不做C++換名,以方便在C語言的模組中使用C++編譯生成的程式碼。 2.預設引數和啞元引數 1)如果呼叫一個函式時,沒有提供實參,那麼對應形參就去預設值。 2)如果一個引數帶有預設值,那麼它後邊的所有引數必須都帶有預設值。 3)如果一個函式宣告和定義分開,那麼預設引數只能放在宣告中。 4)避免和過載發生歧義。 5)只有型別而沒有名字的形參,謂之啞元。 i++ - operator++ ++i V1: void decode (int arg) { ... } V2: void decode (int) { ... }
類和物件:
空間物件的含義:
來自為知筆記(Wiz)
一、C++語言語法基礎(6)
1.從C到C++的過渡(1) 2.類和物件(2) 3.操作符過載(1) 4.繼承與多型(1) 5.異常和I/O流(1)
二、資料結構和演算法(3) 1.基本資料結構,堆疊、佇列、連結串列、二叉樹,實現和應用(2) 2.排序和查詢演算法(1)
三、模板和STL(3) 1.模板語法(1)
四、階段專案(2) 簡化的企業管理資訊系統(MIS)
第一課 從C到C++的過渡 一、背景介紹 算盤 - 面向硬體的程式設計 電子計算機 - 機器語言的程式設計1010 - 組合語言的程式設計ADD - 高階語言的程式設計Fortran
二、C++語言的使用領域: 1.遊戲開發:強建模能力,效能高。 2.科學計算:FORTRAN,C++演算法庫。 3.網路和分散式:ACE框架。 4.桌面應用:VC/MFC,Office,QQ,多媒體 5.作業系統和裝置驅動:優化編譯器的發明使C++在底層開發方面可以和C向媲美。 6.移動終端 既需要效能,同時又要有面向物件的建模。
三、C++比C更豐富 1.支援面向物件,將問題域和方法域統一化。巨集觀面向物件,微觀面向過程。 2.支援泛型程式設計。 int add (int a, int b) { ... } template<typename T> T add (T a, T b) { ... } 3.支援異常機制。 int func (void) { ... } int main (void) { if (func () == -1) { 錯誤處理; } } 4.操作符過載
四、第一個C++程式 1.編譯器:g++,如果用gcc需要帶上-lstdc++,指定其使用標準c++的執行庫。 2.原始檔副檔名:.cpp/.cc/.C/.cxx/.c++,最好用.cpp 3.標頭檔案:#include <iostream> 大多數標準庫標頭檔案都沒有.h字尾。 4.輸出:cout - 標準輸出物件 輸入:cin - 標準輸入物件 插入運算子:<< 提取運算子:>> 5.std:所有標準庫的函式、物件、型別都位於std名字空間中。
五、名字空間 1.對程式中的識別符號(型別、函式、變數)按照某種邏輯規則劃分成若干組。 2.定義名字空間 namespace 名字空間名 { 名字空間成員; } 3.使用名字空間 1)作用於限定符:名字空間名::名字空間成員,表示訪問特定名字空間中的特定成員。 2)名字空間指令: using namespace 名字空間名; 在該條指令之後的程式碼對指令所指名字空間中的所有成員都可見,可直接訪問這些成員,無需加“::”。 3)名字空間宣告: using 名字空間名::名字空間成員; 將指定名字空間中的某個成員引入當前作用域,可直接訪問這些成員,無需加“::”。 4.匿名名字空間 如果一個識別符號沒有被顯示地定義在任何名字空間中,編譯器會將其預設地置於匿名名字空間中。對匿名名字空間中的成員通過“::名字空間成員”的形式訪問。 5.名字空間合併 6.名字空間巢狀 namespace ns1 { namespace ns2 { namespace ns3 { void foo (void) { ... } } } } ns1::ns2::ns3::foo (); using namespace ns1::ns2::ns3; foo ();
六、C++中的結構、聯合和列舉 1.結構 1)定義結構型變數時,可以省略struct關鍵字。 2)結構內部可以定義函式——成員函式。 3)sizeof (空結構) -> 1 2.聯合 增加了匿名聯合的概念。借用聯合語法形式,描述一些變數在記憶體中的佈局方式。 3.列舉 列舉是一個獨立的資料型別。 C: enum E {a, b, c}; enum E e; e = a; e = 1000; C++: enum E {a, b, c}; E e; e = a; e = b; e = c; e = 1000; // ERROR ! e = 1; // ERROR !
七、C++的布林型別 bool b = true; b = false; cout << sizeof (b) << endl; // 1 b = 100; b = 1.234; b = "hello"; b = 'A';
八、C++中的運算子別名 && - and || - or & - bitand ^ - xor { - <% } - %> [ - <: ] - :>
九、C++中的函式 1.過載:在同一個作用域中,函式名相同,引數表不同的函式,構成過載關係。 C++編譯器會對程式中的函式做換名,將引數表中的型別資訊匯合到函式名中,以保證函式名的唯一。 通過extern "C",可以要求編譯器不做C++換名,以方便在C語言的模組中使用C++編譯生成的程式碼。 2.預設引數和啞元引數 1)如果呼叫一個函式時,沒有提供實參,那麼對應形參就去預設值。 2)如果一個引數帶有預設值,那麼它後邊的所有引數必須都帶有預設值。 3)如果一個函式宣告和定義分開,那麼預設引數只能放在宣告中。 4)避免和過載發生歧義。 5)只有型別而沒有名字的形參,謂之啞元。 i++ - operator++ ++i V1: void decode (int arg) { ... } V2: void decode (int) { ... }
類和物件:
空間物件的含義:
來自為知筆記(Wiz)