c語言是c++的乙個子集。所有c語言支援的語法在c++都基本支援並需要使用。
c c++
基本型別&變數
運算子&表示式 類和物件
語句控制 繼承、多型
函式&程式控制 模板、泛型程式設計
指標&陣列 異常處理
結構 c++庫、標準模板庫stl
輸入輸出
c庫函式
c++資料型別分為基本型別、和非基本型別(內建型別、自定義型別)
基本型別:char int float double bool void
非基本型別: 陣列type、指標type*、結構體struct、聯合體union、列舉enum、類class。
內建型別:c++基本的資料型別稱為內建型別,語言內部定義的 基本型別 。
自定義型別:自己定義的型別、struct/class/enum/union等定義的型別就是自定義型別。
命名空間
: 給同作用域提供相同名字的變數而存在的。
可以自己設定不同的命名空間, 可以訪問某個指定的命名空間,如using namespace my;
也可以通過作用域訪問符》:: (兩個冒號)+變數名。 來訪問指定命名空間的。
命名空間域和全域性域是可以同時存在的,但是加上using namespace之後,就會目標不明確;如下**所示;
這樣就會報錯,a:不明確的符號。因為全域性變數和my命名空間同時存在, 此時只要注釋掉24行選中**,就可以正常執行。
c++基本的輸入輸出流:
輸出流:cout<
輸入流:cin>>
輸入和輸出時,直接寫變數名,c++會自動處理,不需要描述輸入輸出的資料型別。省去了指定輸入輸出型別的步驟。
過載:
c++支援過載,過載是在同乙個作用域,函式名相同,但是引數型別、引數列表不同既可構成過載,返回值不在過載判斷條件之中。
c++為什麼支援過載?
c++支援過載是因為c++的函式名的修飾規則;
c++在編譯的過程中: 函式名的組成由函式名傳引數個數和傳參型別所構成。所以之所以支援過載就是因為編譯後的函式名不同,c語言不支援過載是因為沒有函式名修飾規則。
例如:有函式
int add(int x,int y)
int add(int a,int b,int c)
因為引數個數不同,函式名相同,add函式構成過載。
傳參預設:
函式傳參預設,如上圖,傳參預設可以從右往左連續預設(add1、2),但是不可以預設最左邊,不預設右邊的;如add3;
因為引數傳參是會有歧義。c++語法規定。
指標和引用
概念和使用:
引用是對變數的乙個別名,而不死定義乙個新的變數,是給變數起了乙個另外的新名字,
定義格式為: 型別&新名字=已定義過得名字;
例如:int a; int &b=a;
特殊例子:
a=b; 將不同型別的b賦值給a,b會生成乙個臨時int型別的變數,(支援但可能會存在資料丟失),臨時變數具有常性,是用const修飾的,所以引用的型別也必須加上const,所有24行**錯誤,25行**正確。此時的引用是double型別生成的臨時變數的別名,而不是b的別名。
做引數:
引用做引數的時候傳的是型別的別名,可以達到和指標類似的效果,利用變數的別名對變數進行操作,可以達到修改變數的作用,與指標用位址操作效果類似。
做返回值的作用:
引用做返回值可以提高效率,因為函式返回變數時會生成乙個臨時變數,用臨時變數作為函式的返回時,如果用引用返回,就會返回改變量的別名,但是要求出了函式作用域該變數還存在。不然就會越界。
引用時要小心空指標。
指標和引用的區別:
1.引用只能在定義時初始化一次,之後不能指向其他變數。指標變數的值是可變的。
例如: int a=10; int &b=a; int *p=&a; b只能是變數a的別名,不能變成其他變數的別名,但是p指標可以更改指向其他變數。
2.引用必須指向有效的值(確定到底是誰的別名),指標可以為空。
例如: int a; int&b;b=a; 是錯誤的。 引用必須初始化,確定你到底是誰的別名。
3.sizeof 指標物件和引用物件的意義不同。
4.指標引用自增自減的意義不同。
5.引用比指標更安全。
6.引用是別名,指標是位址。從語法上講引用是不需要開闢空間的,指標需要開闢,但是從底層記憶體上看,引用的的實現就是利用指標實現的。
但是指標比引用更加靈活,但也更危險。
1 知識總綱
涉及的知識總綱 linux ubuntu 知識總結 1.linux 常用指令 2.linux 常用軟體 安裝及解除安裝 3.linux 常見問題及解決 高階篇 4.linux c 知識總結 5.qt 開發總結 ros 知識總結 ros基礎知識 1.ros 發布器,訂閱器 2.ros 服務 和客戶端 ...
總綱 2023年要學習的知識
在大學混了一年,好歹有了一點程式設計的感覺吧。學了c,又學了c 想做遊戲,搞了搞圖形庫,linux一直玩不轉。反正看似學了不少,但是其實一點都不精啊,跟身邊大佬的差距實在是太大了。其實在乙個多月之前就想寫這篇文章的,本來想寫在紙上,太懶。就想用word寫成日記的樣子,儲存在電腦裡,又想到可能會丟,哎...
C 入門知識
iostream是輸入輸出庫流。字首std 表明是定義在命名空間 namespace std中的。使用命名空間,程式設計師可以避免由於無意中使用了與庫中所定義名字相同的名字而引致衝突。因為標準庫定義的名字是定義在命名空間中,所以我們可以按自己的意圖使用相同的名字。標準庫使用命名空間的 是,當我們使用...