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 型別的資料型別,值為 true 或 false,其大小為 1 個位元組;
相對來說,在標頭檔案 windows.h 中有一種型別 BOOL ,實際上是 int 的 typedef,其值為 TRUE 和 FALSE,大小是 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的。