1. 程式人生 > >C++學習 18-11-20

C++學習 18-11-20

1.增強的for迴圈

1.在C++中,可以在任意一個位置宣告變數

for(int i=0; i<10; i++)
{
	cout << i << endl;
}

2.範圍 for迴圈

在C++中會有一種類似於python中迭代器的操作,類似以下的迴圈:

int arr[5] = {1, 2, 3, 4, 5};
for (int value:arr)
{
	cout << value << endl;
}

結果:1 2 3 4 5
注意:這種操作只能遍歷一個靜態陣列。

2.auto型別

auto型別是一種可以自動識別變數型別的型別。
比如上例中的 int value 可以替換為 auto value 仍可以正常執行。

int arr[5] = {1, 2, 3, 4, 5};
for (auto value:arr)				// auto 可以自動識別arr的元素型別為int
{
	cout << value << endl;
}

3.bool型別

在C++中,提供 bool 型別的資料型別,值為 truefalse,其大小為 1 個位元組;
相對來說,在標頭檔案 windows.h 中有一種型別 BOOL ,實際上是 int 的 typedef,其值為 TRUEFALSE,大小是 4 個位元組(原因是BOOL實際上是int型別,因此大小與int型別一致)。

bool is_or_not =
true; cout << sizeof(is_or_not) << endl; #include<windows.h> BOOL Is_Or_Not = TRUE; cout << sizeof(Is_Or_Not) << endl;

4.函式預設引數

1.有關函式預設引數的知識先前已經進行過學習,本次進行復習。

首先,函式引數的預設值是由右向左進行賦予預設值的,原因在於如果從左向右進行預設值的賦予,倘若有4個引數,而預設值給定了3個,則意味著最後一個引數沒有預設值,當進行函式呼叫的時候,需要賦予引數,此時只賦1個值會報錯(只賦一個值表示理解為前三個有預設值,只需賦最後一個引數的值);全賦上值則可以正確呼叫,但是此時預設值無意義,因為只有全賦值的情況下函式可以呼叫;從右向左進行賦予預設值的話,倘若有4個引數,而預設值給定了2個,則當呼叫函式而只給定兩個引數時,可以將這兩個引數賦值給前兩個沒有預設值的引數。

2.預設值在宣告函式的時候給出。

void ShowSLAM(int param1, int param2, int param3 = 4, int param4 = 5);

int main()
{
	...
}

void ShowSLAM(int param1, int param2, int param3, int param4)
{
	...
}

5.函式過載

定義:函式過載的意思就是 **在同一個作用域,具有相同的函式名的函式所具有的引數不同(引數的型別不同或引數的個數不同)。
下面以一個簡單的例子來進行解釋說明:

// 例1.求圓的面積
void Area(int r)
{
	cout << r*r*3.14 << endl;
	return;
}

// 例2.求長方形的面積
void Area(int l, int h)
{
	cout << l*h << endl;
	return;
}

// 例3.輸出字串
void Area(char *str)
{
	cout << str << endl;
	return;
}

當我們呼叫這三個函式時,根據所輸入的引數的型別、引數的個數會呼叫不同的函式。

6.const常量

複習:
例1. const int *p;
此時,*p無法進行修改而 p 可以進行修改。

7.string 標頭檔案

在C++中,有一種新的型別用來儲存字串,型別關鍵字:string。

#include<iostream>
#include<string>

using namespace std;

int main()
{
	char *str1 = "alksdjflakjdf";
	char *str2;								
	str2 = "jsaldfkjalskdfj";					// 
	string str3;
	str3 = "saldfjaljdf";
}

可以對 string 宣告的變數進行 +、= 操作。

  • 操作用來對字串進行拼接;
    == 操作用來對字串進行比較是否相等(相等返回1,不相等返回0)。
string str1, str2;
str1 = "Hello SLAM";
str2 = "Hello slam";
cout << str1 == str2 << endl;
str1 += " I can't understand it";
cout << str1 << endl;

8.引用

1.引用運算子

&

2.引用的概念

引用就是給變數起別名(不同於typedef)

3.作用

引用可以使程式在不同作用域使用同一個變數。

4.注意

注意: 引用定義了之後需要初始化

5.與指標的區別

1.引用定義了之後需要進行初始化
2.引用初始化後就不能再重新引用其他空間
3.有空的指標,但是沒有空的引用,引用要引用一個合法的儲存單元,可以 const int& a = 123。

6.優點

安全,只能操縱一塊空間

7.

引用是C++語言中的一個特殊的資料型別描述,用於在程式的不同部分使用兩個以上的變數名指向同一地址。

int a = 100;
int& b = a;		// 引用
b++;			// 對引用操作,實際上就是對原數操作
cout << a << endl;

注意 :引用一旦被初始化,就不能再重新引用其他空間!!!

8.總結

& 符號的三種用法:
1.取地址符
2.按位與
3.引用

9.編寫一個交換兩個輸入引數的函式

// 使用引用的方法
void Swap(int& num1, int& num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;

	return;
}

// 使用指標的方法
void Swap(int* num1, int* num2)
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;

	return;
}

10.函式引數的傳遞方式

1.值傳遞
2.地址傳遞
3.引用傳遞

11.選擇函式引數的傳遞方式

1.是否需要修改傳入的內容,若修改,使用地址或引用傳遞;不修改,使用值傳遞;
2.在C++中不建議使用值傳遞;
3.地址傳遞和引用傳遞的區分方法:看傳入的是不是new出來的空間,若是,則使用指標傳遞

9.面向物件(Object Oriented Programming)

1.有類和物件之分

類指的是模版,物件是真實存在的實體。

定義一個類:

class CPerson
{
	...	
};

類似於C語言中的 struct ,一般以C開頭作為類名。

2.訪問修飾符

1.public:在任何一個地方都可以見到
2.protected:在自己和派生類中可以見到
3.private:只有自己可以見到;若成員屬性沒有訪問修飾符,則預設為 private。

3.類中包括

1.成員屬性:
2.成員函式(方法):類內定義的方法,一般來說,成員函式是public的。