C++学习笔记(草稿版)
1:C++新增數據類型
???????? Bool類型? 真true 假false
2:C++新增一種初始化方法
???????? 傳統(復制初始化):int x =1024;
???????? 新增(直接初始化):int x (1024);
3:隨用隨定義
4:輸入輸出
cout 語法形式(輸出)? <<輸出流 ?endl相當于回車;
???????? cout<< X << endl;????????????
???????? cout<< “X +Y =” << x + y;
???????? cout<< x, y, z << endl? (錯誤)???????? cout << x?<< “,” << y << “,” << z << endl;
cin 語法形式 (輸入)????? ?>>輸入流
???????? cin>> x;
???????? cin>> X >> y;
???????? 不關注占位符, 不關注數據類型 ,不易出現問題
?
5:C++命名空間(namespace)
???????? namespace 空間名
???????? using namespace 空間名
???????? 空間名::變量/函數
???????? using namespace B;
int main()
{
???????? std::cout << A::x <<std::endl;
??????? ?A::fun();
???????? std::cout << x <<std::endl;
???????? fun();
???????? fun2();
???????? system("pause");
???????? return 0;
}
6:別名與引用(&引用符號)
???????? 基本數據類型的引用
?????????????????? inta =3;
?????????????????? int&b = a;??????? //定義別名
???????? 結構體數據類型引用
???????? ???????? Typedef struct{
???????? ???????? int x;
???????? ???????? int y;
}Coor;
?
int main(){
???????? Coor c1;
???????? Coor &c = c1; //定義別名
}
???????? 指針類型的引用
?????????????????? 類型 *&指針引用別名 = 指針;
?????????????????? int a = 10;
int *p = &a;
int *&q = p;????? //定義指針別名
*q = 20;
???????? 引用作為函數參數
???????? ???????? Void fun(int &a, int &b)???????????? //通過別名來實現數值交換
{
???????? ???????? int c = 0;
???????? ???????? c= a; a = b; b = c;
}
int main(vodi)
{
int x = 10, y = 20;
fun(x,y);
}
7:C++語言-const(變量變為常量)
const 基本數據類型(略)
? ? ? ? ? ? ? ? ?const int a =10;??????? a此時為常量;
???????? ?const與指針類型
? ? ? ? ? ? ? ? ?const int *p = NULL 與 int const *p = NULL完全等價;
?????????????????? 上面限定的是*p為常量
?????????????????? int*const p = NULL; const限定的是 p;
?????????????????? consint *const p = NULL 等價于 int const *const p = NULL;
???????? const與引用
?????????????????? intx = 3; const int &y = x;???????? //限定的是別名y
?????????????????? //x= 10; 正確 // y =10; 錯誤
?
8:C++函數的新特性
???????? A:函數參默認值
??????????????????
???????? ????????
聲名時加默認值,定義時不用加(加的話,某些編譯器可能會出錯)
???????? B:函數的重載
?????????????????? 在相同作用域內
??????????????????????????? 用同一個函數名定義多個函數
??????????????????????????? 參數個數和參數類型不同
?????????????????? getMax(int x, int y, int z)????????? getMax_int_int_int
?????????????????? getMax(double x, double y)???? get_double_double
???????? C:內聯函數(inline)
inline int Max(int a, int b, int c);
int main(void){
???????? *****
???????? m= max(i, j, k)
???????? *****
}
?內聯函數省去調用過程2,4,適合多次重復調用的結構
???????? 內聯編譯是建議性的,由編譯器決定。
???????? 邏輯簡單,調用頻繁的函數建議使用內聯
???????? 遞歸函數無法使用內聯方式
9:C++內存管理(new/delete)
???????? 申請內存 int *p = new int;
???????? 釋放內存 delete p;
???????? 塊內存的申請與釋放:
?????????????????? Int *arr = new int[10];???? //申請塊內存
?????????????????? delete []arr;??????????????????????? //釋放內存塊
????????
???????? 注意事項:
?????????????????? int *p = new int[1000];
?????????????????? if(NULL == p)??? //是否申請成功
?????????????????? {
??????????????????????????? //內存申請失敗
? }
delete p;? //delete []p;???? //注意區分是否為塊內存
p = NULL;???????????????????????????? //釋放完要設空(懸空)
10:類(class)&對象(具體的事物)
類的定義:
上述即為一個類的封裝(暴露/隱藏)
訪問限定符
???????? public:?????????????? 公有的
????????? protected:?????? 受保護的
???????? private:??????????? 私有的
11:對象的實例化
?????????????????? 從棧實例化對象(直接用類名定義內存空間)
???????????????????????????
??????????????????????????? 使用完后系統自動回收內存空間
?????????????????? 從堆實例化對象(申請內存空間)
???????????????????????????
??????????????????????????? 使用完需手動釋放內存空間
?????????????????? 對象成員的訪問方法
??????????????????????????? 棧成員的訪問:
????????????????????????????????????
??????????????????????????? 堆成員的訪問:
???????????????????????????????????? ?
12:初始化string(字符串)
???????? String 類型:
?????????????????? 實例:
???????? ???????? #include<iostream>
?????????????????? #include<string> ??? //字符串頭文件
?????????????????? using namespace std;
?????????????????? int main(void)
{
???????? string name = “ZhangSan”;
???????? string hobby (“football”);
???????? cout<< name << hobby << endl;
???????? return0;
}
13:數據的封裝
?????????????????? 面向對象的指導思想(以對象為中心)
??????????????????????????? 誰做什么?來表達程序邏輯。
? 代碼體現:將所有對數據的操作,轉化為對成員函數的調用。及對象對數據的操作都通過調用自己的函數來完成。
實例-1:
???????? classStudent??????????? //封裝的好出-限定數據的輸入
{
???????? public:
?????????????????? voidsetAge(int _age)
?????????????????? {
??????????????????????????? If(_age> 0 && _age < 100)
??????????????????????????? {
???????????????????????????????????? age= _age;
? ? }else{
???????? ? ? ?……
}
?}
int getAge() { return age };
? ? ? ? ? ? ? ? ?private:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?stringname;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int age;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? …….
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? 實例-2:
? ? ? ? ? ? ? ? class Car?????????? //封裝的好處-數據屬性-只讀屬性
{
???????? public:
?????????????????? int getWheelCount(){return m_iWheelCount;}
???????? private:
?????????????????? int m_iWheelCount;???????? //只讀屬性
}
14:類內定義與內聯函數/ 類外定義
??????????????????
???????? 類外定義(同文件/分文件):
?????????????????? 同文件類外定義:
???????????????????????????
?????????????????? 分文件類外定義:(類聲名寫在頭文件內,類的定義寫在*.cpp內)
???????????????????????????
???????????????????????????????????? 文件結構:
?????????????????????????????????????????????? 頭文件夾/Car.h?????? (里面只寫類的聲名)
?????????????????????????????????????????????? 源文件夾/Car.cpp?? (里面具體定義類內的函數)
?????????????????????????????????????????????? 源文件夾/項目主文件.cpp
?????????????????? 注意事項:
為區別與標準頭文件,自定義頭文件引用時用””(“Car.h”)
??????????????????????????? 類外定義的函數可以重載
類內定義的函數優先選擇編譯為內聯函數
可以將類的聲明與類的定義分成兩個文件編寫。
15:對象結構
?????????? 內存分區:
???????????????? 棧? 區:int x = 0; int *p= NULL;
???????????????????? 堆? 區:int *p = new int[20]
全局區:存儲全局變量及靜態變量
常量區:string str =“hello”;? (字符串 / 常量)
???????????????????? 代碼區:存儲邏輯代碼的二進制(二進制代碼)
????????????? 對象初始化(有且僅有一次):
如何避免誤操作:(構造函數)
? 構造函數的規則和特點:
? 1:構造函數在實例化時被自動調用(被調用且僅被調用一次)
2:構造函數與類同名
3:構造函數沒有返回值
4:構造函數可有多個重載形式
5:實例化對象時僅用到一個構造函數
6:當用戶沒有定義構造函數時,編譯器自動生成一個構造函數
無參構造函數(實例化時自動調用,無需參數傳遞)
??? class Student
??? {
??? publice:
?????????? Student(){m_strName = “Jim”;}????? //構造函數名為類名
??? private:
?????????? string m_strName;
};
?????? 實例化操作:Student st;
?????????????????????????有參構造函數:(在實例化時需要傳入參數)
? ? ? ? ? ? ? ? ? ? ? ? ? classStudent
? ? ? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? public:
???????????????????????????????????Student(string _name)????? //構造函數名為類名
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {m_strName= _name;}
? ? ? ? ? ? ? ? ? ? ? ? ? ? private:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? stringm_strName;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?};
??????????????????????????????????實例化時傳入參數:Student st(“Merry”);
??????????????????????????? 重載構造函數
??????????????????????????????????
16:構造函數初始化列表(對成員變量初始化)
?????????? 默認構造函數:
?????
????? 初始化列表格式:
????? ????? 構造函數后加“:”,然后對各個成員變量賦值,賦值時只能用“()”
初始化列表特性:
? ? ? ? ? ? ? 1:初始化列表先于構造函數執行
????????????? 2:初始化列表只能用于構造函數
????????????? 3:初始化列表可以同時初始化多個數據成員(效率高、速度快)
????? 初始化列表的必要性:
? ? ? ???
? ? ? ? ?
??
17:拷貝構造函數:
拷貝構造函數的引用:
?????? 第一種情況(下圖):
????????????? Student stu1;
????????????? Student stu2 = stu1;
????????????? Student stu3(stu1);
??? 第二種情況:
??????? 實例化的一個類作為一個函數的參數。
??? Void Test(Teacher t){}
??? Int main(void){Teacher t1; Test(t1)}
拷貝構造函數的特點:
1:如果沒自定義的拷貝構造函數則系統自動生成一個默認的拷貝構造函數
2:當采用直接初始化或復制初始化實例化對象時系統會自動調用拷貝構造函數
3:拷貝構造函數的參數是固定的,故不可以重載。
構造函數總結
18:析構函數:(對象銷毀之前,被自動調用,釋放系統資源)
???? ???? 定義格式:~類名(){};
?????????? class Student
? {
? ? ? ? ? public:
????????????? Student(){m_pName = new char[20]}
????????????? ~Student(){delete []m_pName}????? //析構函數
? ? ? ? ? private:
????????????? char *m_pName;
?};
????? ????? 特點:
???????????????? 1:如果沒有自定義的析構函數,則系統自動生成
???????????????? 2:析構函數在對象銷毀時自動調用
?????????? ?3:析構函數沒有返回值,沒有參數也不重載
????? 對象的生命歷程:
??
前三段知識梳理(類、對象)
????? 類(class):
??????? 數據成員:
??????? 成員函數:
?
?
???????
總結
以上是生活随笔為你收集整理的C++学习笔记(草稿版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 常用快捷键 + word
- 下一篇: kali2017添加国内更新源 + 配置