【C++總複習】第1章----C++對於C的擴展

一、C++對C的擴充

1.C++的輸入輸出

1.1用cout輸出

cout<<"Hello World!!!\n";
//將Hello World!!!打印在屏幕上並換行
cout<<"Hello World!!!"<<endl;
//將Hello World!!!打印在屏幕上並換行

1.2用cin進行輸入

int a;
float b;
cin<<a<<b;//從鍵盤中以此讀入以空格分開的數字放入a b變量中,

2.C++定義常變量

2.1C語言常用#define定義常量

#define PI 3.1415926

注意:實際上編譯器在預編譯時將程序中出現的字符串PI全部替換成3.1415926,預編譯之後,不再有PI這個標識符,PI不是變量,沒有類型,不佔用存儲單元。

2.2C++語言常用const定義常變量

const float PI = 3.1415926;

注意:PI是常變量,有數據類型,佔用內存空間,有地址,可以用指針指向它,可以理解爲程序運行期間值不可以改變的變量。

3.函數原型聲明

3.1C語言的函數聲明

int max(int x,int y);
int max();
max();		//若max返回值爲整形,可以省略

3.2C++的函數聲明

C++中,如果調用函數在函數定義之前,必須對調用的函數作函數聲明的嚴格檢查
聲明形式:函數類型 函數名(參數列表)

int max(int x,int y);
int max(int ,int );

4.函數的重載

函數重載:在同一作用域中用同一函數名定義多個函數,這些函數的參數個數和參數類型不相同,這些同名函數用來實現不同的功能,即一函數名多用。
C++將C語言中的“<<”和“>>”左右移運算符進行了重載,變成了輸入輸出運算符,這稱爲運算符的重載

函數重載條件:
①作用域相同
②函數名相同
③參數個數不同或者參數類型不同

例:求三個數中的最大數(分別考慮整數、實數、長整數情況)

int max(int a,int b,int c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
float max(float a,float b,float c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
long max(long a,long b,long c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}

5.函數模板

函數模板:建立一個通用模板,它的函數類型和參數類型不具體指定,用一個虛擬的類型來取代,這個通用的函數就稱爲函數模板。
優點:用一個模板函數取代了函數重載中的多個函數,減少了代碼的冗餘。
例:求三個數中的最大數(分別考慮整數、實數、長整數情況)

template <typename T>	//模板聲明,T爲虛擬類型
//template<class T>		//模板聲明的另一種形式
T max(T a,T b,T c){		//定義一個通用函數,用T作虛擬類型名
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
void fun(T x,T y){

}

使用函數模板的條件:參數個數相同

6.有默認參數的函數

簡單來說就是可以給函數形參列表中的變量賦初始值,調用函數時可以不傳入實參
要求:
①有默認值的形參必須位於無默認值的形參之後
②調用有默認參數的函數時,傳入的實參個數必須大於等於無默認值得形參個數

void fun1(int a = 0, int b,int c = 3)//錯誤
void fun2(int b,int a = 0int c = 3)//正確

fun2()//傳入的實參個數爲0,不合法
fun2(3);//合法
fun2(3,4);//合法
fun2(3,4,5);//合法

③一個函數不能同時作爲重載函數和有默認值的函數,會引發二義性,系統無法執行

int max(int a,int b,int c = 100){}
int max(int a,int b){}

max(1,2)//產生二義性,系統無法確定調用的是哪一個函數

7.變量的引用

變量的“引用”(reference)就是給變量取一個別名

int a = 10;
int &b = a;	//這裏b就是a的引用變量

圖解:
在這裏插入圖片描述
這裏對b進行操作就相當於對a進行操作,這裏a、b共享同一片內存地址,內存中存的是10,不過是同一片內存地址的兩個名字,分別叫a、b

作爲函數形參,作用類似於指針

void swap(int *a,int *b){	//利用指針交換兩個數
	int temp = *a;
	*a = *b;
	*b = temp;
}
void swap(int &a,int &b){	//利用引用交換兩個數
	int temp = a;
	a = b;
	b = temp;
}

使用引用需要注意
①聲明引用必須對它初始化,即將它與另一個變量聯繫起來

int a = 10;
int &b;			//不合法,未初始化
int &c = a;		//合法

②一旦引用被初始化,它便不能再次引用其他變量

int a = 10;
int b = 10;
int &c = a;
int &c = b;		//不合法,c已經是a的別名了

③const修飾引用後,不能通過引用修改值,但是可以通過原來的變量修改值

int a = 10;
const int &b = a;
b = 20;		//不合法,b被const修飾,無法改變其中的值
a = 20;		//合法,a未被const修飾,可以改變其中的值

8.內置函數(內聯函數)

問:爲什麼有內聯函數?
答:由於在主函數中調用其他函數需要函數壓棧,函數調用完後需要函數彈棧,會消耗一定時間,使用內聯函數可以提高代碼運行效率。
內置函數的解釋:內置函數相當於將函數鑲嵌到函數調用的位置,可以內置函數看成,在函數內部的一個函數,只不過這個函數代碼寫在函數外部。
關鍵字:inline

inline int sum(int a,int b){
	return a+b;
}
int main(){
	int Sum = sum(3,6);
	return 0;
}
//相當於:
int main(){
	int a = 3;
	int b = 6;
	int Sum = a+b;
	return 0;
}

上述代碼運行時,編譯器會將內聯函數看成主函數中的一部分代碼,從而省去了sum函數的壓棧彈棧時間,提高了效率

9.作用域運算符::

每一個變量都有其有效的作用域,只能在變量的作用域內使用該變量,不能直接使用其他域中的變量

float a = 13.6;
int main(){
	int a = 5;
	cout<<a<<endl;//輸入main函數中的局部變量a
	cout<<::a<<endl;//輸出全局變量a
	return 0;
}

C++提供作用域運算符“::”來指定所需要的的作用域,“::”不可以用來訪問函數中的局部變量

10.字符串類型

字符串類型博客

11.動態分配內存

動態分配內存博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章