命名空間
剛開始接觸c++,我們會發現與c語言相比不光頭檔案有所不同,還會發現using namespce std;這句話,其實這就是c++的命名空間。
(1)概念
命名空間是為了防止名字衝突提供更加可控的機制。命名空間分割了全域性命名空間,其中每乙個命名空間是乙個作用域。由三部分組成,分別是namespace、空間名字和一系列由花括號括起來的宣告和定義。
(2)作用
是建立一些互相分隔的作用域,把一些全域性實體分隔開來。
(3)例子
命名空間和類就好比是資料夾和檔案的關係。命名空間就像是資料夾,它包含了若干個檔案,這樣可以將定義的很多類整齊地擺放起來,不僅可以避免命名衝突,還可以簡化對類成員的訪問。用花括號把檔案的一部分括起來, 並以關鍵字namespace開頭給它
起乙個名字:
namespace
name1
namespace
name2
name1: : a = 3;
name2: : a = 4;
::是作用域解析符
(4)優點如果在程式一開始不寫上using namespace std;那麼每次使用時就要這樣寫,這樣顯然比較麻煩。
注:endl相當於c語言中的\n.
#include
//using namespace std;
int main()
(5)巢狀使用
#include
using
namespace
std;
namespace you
}int main()
輸入輸出流流:資料之間的傳輸操作。
輸入輸出操作是由istream輸入流和ostream輸出流提供的,iostream是從這兩個類中派生的,允許雙向輸入和輸出。這個庫定義了3個標準流物件。
(1)cin:標準輸入的istream類物件,使使用者能夠從終端讀資料,預設是鍵盤。> > 是輸入操作符。
(2)cout:標準輸出的ostream類物件,使使用者能夠從終端寫資料,預設是螢幕。< < 是輸出操作符。
(3)cerr:標準輸出的ostream類物件,cerr輸出程式錯誤,預設是螢幕。
過載
(1)概念
所謂過載,其實就是「一物多用」。
函式過載,即在同一作用域類, 一組函式的函式名相同, 引數列表不同( 個數不同/型別不同) ,返回值可同可不同。不僅函式可以過載,運算子也可以過載,例如,運算子」<>」既可以作為位移運算子,又可以作為輸入操作符和輸出操作符。
(2)原因
那麼,為什麼c++支援過載呢?其原因在於函式名的修飾規則。從**的編譯到執行,在vc6.0或vs這種編譯器下,它是系統直接完成了翻譯與鏈結,直接生成了執行結果。
編譯器內部完成了翻譯部分:
1.預處理
2.編譯過程:將高階語言轉為組合語言。
3.彙編過程:組合語言轉為二進位制程式,生成目標檔案。
4.鏈結部分:所引用的資料鏈結進來,形成可執行程式。
比如乙個函式的宣告如下:
void function(int x,int y);
在c語言中,編譯器在編譯後在庫中的名字為_function
在c++中,編譯器在編譯後在庫中的名字為_function_int_int,在鏈結時是找名字進行鏈結,由於c++中它們的名字不一樣,所以就不會報錯。
(3)規則
① 函式名要相同;
② 引數個數不同,引數型別不同,引數順序不同,均可構成過載;
③ 返回值型別不同則不可以構成過載。
c++預設引數
(1)概念:在函式宣告或定義的時候給形參乙個預設的引數。這樣在呼叫該函式,如果沒有給實參,函式的這個形參就預設為這個值。
// 全預設引數
int add1 (int a = 0, int b = 0)
//半預設引數
int add2 (int a, int b = 0)
int main()
(2)使用規則預設引數賦值必須要連續且從右向左賦值;
不能把const的全域性變數作為預設值;
預設值必須是常量;
呼叫時你只能從最後乙個引數開始進行省略;
指標和引用
指標
學習c語言時已經知道,每乙個資料都是有位址的,通過位址就可以找到所需的記憶體空間。
(1)概念:乙個變數的位址稱為該變數的指標。
(2)使用方法:基型別 * 指標變數名
*const指標*(常指標)
int a=1;
const
int*p=&a;//定義了p為指向整形變數a的const指標變數
*p=15;//非法(不允許通過指標變數改變它指向的物件的值)
指標的作用和特點前面已經有了深入學習,在這裡不再加以詳細介紹。
引用
(1)概念:引用不是定義乙個新的變數, 而是給乙個已經定義的變數重新起乙個別名。
(2)使用方法:型別 &引用變數名 = 已定義過的變數名.
*普通引用*
int mian()
*const引用*
int main()
*不同型別變數間的引用*
想要用int型別的c來引用double型的b,首先先會將b變數放入乙個int型別臨時變數,再用const int型別的c來引用這個臨時變數,臨時變數具有常屬性,所以就需要有乙個const int型別的名字來完成這個引用。
(3)特點:
1. 乙個變數可取多個別名
2. 引用必須初始化
3. 引用只能在初始化的時候引用一次, 不能改變為再引用其他的變數。
(4)作用
1.做引數
#include
using
namespace
std;
void swap(int&a,int&b)
int main()
void main()
{ int a=2,b=3;
int &c=add(a,b);
cout
<指標和引用的區別
(1)指標是儲存另乙個物件的位址的變數,而引用是物件的別名。
(2)指標未被初始化或被刪除時,應將null賦給它,但引用不能為空。
(3)sizeof指標物件和引用物件的意義不一樣,sizeof引用是指向變數的大小,sizeof指標是指物件位址的大小。
(4)引用只能在定義時初始化一次, 之後不能改變指向其它變數( 從一而終), 指標變數的值可。
(5) 指標和引用自增(++)自減(–)意義不一樣。
(6) 相對而言, 引用比指標更安全。
C 入門基礎知識
1.c 基本資料型別 整型int 字元型 char 浮點型 float double 邏輯性 bool 無型別 void 也稱內建型別 語言內部 已定義好的型別 非基本資料型別 陣列 type 指標 type 結構體 struct 聯合體 union 列舉 enum 類 class 這些即就是自定義...
c 入門基礎知識
名字空間 namespace,即名字空間,是指 識別符號的各種可見範圍。c 標準程式庫 中的所有識別符號都被定義於乙個名為std的namespace中。使用 using namespace 可以使得後面不需要每次指定名字空間。1 名字 空間除了 系統定義 的名字空間之外,還可以自定義,定義 名字空間...
C 入門基礎知識
一 命名空間 命名空間 實際上就是乙個由程式設計者命名的記憶體區域,程式設計者可以根據需要指定一些有名字的空間域,把一些全域性實體分別放在各個命名空間中,從而與其他全域性實體分隔開來。它相當於乙個更加靈活的檔案域 全域性域 可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個...