從C到C++
新類型 bool類型
新的輸入輸出方式 con cout
新的內(nèi)存存儲(chǔ)方式 new delete
引用& 用于傳參
函數(shù) 內(nèi)斂函數(shù)inline 通過代碼區(qū)膨脹 減少函數(shù)的跳轉(zhuǎn)時(shí)間 用來代替c語言的宏定義 放在函數(shù)的前面
重載 函數(shù)名相同參數(shù)不一樣 參數(shù)類型相同 參數(shù)個(gè)數(shù)不一樣 在編譯的時(shí)候相同函數(shù)名存儲(chǔ)的形式不一
缺省 定義的時(shí)候 給參數(shù)賦默認(rèn)值 調(diào)用函數(shù) 可以不用給缺省的參數(shù)賦值 缺省條件從右向左
命名空間
using namespace std;
防止函數(shù)沖突
命名空間的三種方法
using namespace std; 最不安全 最簡單 可以直接調(diào)用命名空間std里面的函數(shù)cin>>x;
std::cin>>x;最安全最麻煩 每次調(diào)用函數(shù) 都需寫命名空間std
using std::cin; cin>>x見于上面兩個(gè)之間 調(diào)用什么就在using 命名空間里寫什么
域名解析符::
類和對象
結(jié)構(gòu)體 成員變量 點(diǎn)運(yùn)算符 箭頭運(yùn)算符
類 成員函數(shù) 在類中定義 使用this來訪問成員 必須用對象調(diào)用或者對象指針調(diào)用
成員函數(shù)在類外定義 需要函數(shù)名前面加上類名 使用域名解析符進(jìn)行定義
訪問權(quán)限 共有public 可以在外部訪問 私有private 受保護(hù) protected 不能在外部訪問
類是私有的結(jié)構(gòu)體 結(jié)構(gòu)體是公有的類
構(gòu)造析構(gòu)
函數(shù)名和類名相同就是構(gòu)造 可以有多個(gè) 可以重載 可以缺省 根據(jù)對象的參數(shù)來調(diào)用哪一個(gè)構(gòu)造
在類名和函數(shù)名前沒加~代表析構(gòu) 只有一個(gè) 沒參數(shù)
構(gòu)造和析構(gòu)都沒有返回值 在一個(gè)類的定義的時(shí)候 編譯器會(huì)自動(dòng)加上構(gòu)造和析構(gòu)
const修飾成員 const修飾成員變量 必須初始化形參列表賦值
const修飾成員函數(shù) 函數(shù)后面加航const 防止使用this執(zhí)政來修改成員的值
拷貝構(gòu)造
拷貝構(gòu)造是一種特殊的構(gòu)造
對象在定義的時(shí)候 可以調(diào)用拷貝構(gòu)造 也可以調(diào)用其他構(gòu)造 如果參數(shù)是同類型的對象 那么調(diào)用拷貝構(gòu)造 拷貝構(gòu)造的 形參必須使用引用(規(guī)定)
參數(shù)是對同一類型對象的引用
拷貝的兩種方案 深拷貝和淺拷貝
深拷貝每個(gè)指針單獨(dú)指向一塊內(nèi)存 對于對內(nèi)存 每次開辟新的內(nèi)存 存放內(nèi)容 不讓兩個(gè)指針指向同一塊區(qū)域
static修飾的成員 變量不屬于某個(gè)對象 屬于全部的對象 整個(gè)類和這個(gè)給類的所有對象 全部共享一份static變量 必須在類外初始化
static修飾成員函數(shù) 成員函數(shù)前沒加上static 里面沒有this指針無法訪問普通成員
運(yùn)算符重載
友元 friend 可以訪問對象的私有成員 不屬于類 因此沒有this指針
可以訪問該類對象的成員 包括私有
重載運(yùn)算符操作數(shù)是幾個(gè) 就有幾個(gè)參數(shù)
friend返回值類型 operator運(yùn)算符(參數(shù)a,參數(shù)b)
運(yùn)算符重載 想要使用什么運(yùn)算符 就堆什么運(yùn)算符進(jìn)行重載
operator+運(yùn)算符 函數(shù)名 重載方式
成員函數(shù)的調(diào)用方式 雙目運(yùn)算符 只需要一個(gè)額外的參數(shù) 另外一個(gè)參數(shù)是this
A A::operator+(const A&b); 引用提高效率 const防止修改
繼承
繼承是在原有類的基礎(chǔ)上 創(chuàng)造一個(gè)新的類 子類會(huì)繼承父類所有的成員變量 父類有的子類都有
原有類稱為父類或者基類 新類稱為子類或者派生類父類派生子類 子類繼承父類
權(quán)限控制 繼承之后堆一些訪問權(quán)限做了修改 父類的私有成員在子類中不可訪問
子類在父類的基礎(chǔ)上加了新的成員
子類可以定義與父類同名的變量或者函數(shù) 父類得到隱藏 優(yōu)先調(diào)用子類的新成員
父類的構(gòu)造和析構(gòu)不能用于子類 子類需要的時(shí)候需要重寫父類的構(gòu)造和析構(gòu) 所有子類的構(gòu)造和析構(gòu)都要調(diào)用父類的構(gòu)造
子類先調(diào)用父類的構(gòu)造 然后再調(diào)用子類的構(gòu)造 子類先調(diào)用自己的析構(gòu)然后再調(diào)用父類的析構(gòu)
多態(tài)
一種形式多種狀態(tài)
實(shí)現(xiàn)方式 虛函數(shù) 父類指針/引用可以指向子類對象 優(yōu)先調(diào)用父類函數(shù)
子類重寫父類函數(shù) 用父類指針可以調(diào)用子類重寫的函數(shù)
動(dòng)態(tài)聯(lián)編 調(diào)用的時(shí)候才知道調(diào)用那個(gè)函數(shù) 使用函數(shù)指針根據(jù)指針找到函數(shù) 比較靈活速度不快
靜態(tài)聯(lián)編 再運(yùn)行前就知道調(diào)用什么函數(shù) 速度比較快但 不靈活
虛表 擁有虛函數(shù)的對象中會(huì)有虛表指針 這個(gè)指針指向虛函數(shù)表(表中存放虛函數(shù)地址)
子類重寫父類虛函數(shù)是區(qū)修改虛表中的地址
文件操作
文件分為二進(jìn)制文件和文本文件
文本文件:txt cpp直接能打開的文件 字符流
二進(jìn)制文件 需要特定的軟件才能打開 字節(jié)流
c語言通過文件執(zhí)政來操作 FILE *fp 所有的操作圍繞文件指針來進(jìn)行
文件流 ifstream 只寫文件 ofstream 只讀文件
fstream 打開關(guān)閉open close is_open 讀寫文件 get/put read/write getline 輸入輸出運(yùn)算符
操作seekp 移動(dòng)文件的位置 tellp 得到文件指針的偏移量
異常處理
計(jì)算的時(shí)候 遇到除法 除數(shù)是0的情況 文件打開失敗 申請對內(nèi)存的時(shí)候失敗
運(yùn)行的時(shí)候遇到非代碼錯(cuò)誤的問題 遇到之后 提交給調(diào)用方處理
處理方式 try 測試代碼 catch 捕獲異常 throw 拋出異常
處理不了給上級 如果最終無人處理或者處理不了 結(jié)束程序
C11標(biāo)準(zhǔn)
變量初始化 int a=0,a(0),a{0};
nullptr 相當(dāng)于c中的NULL 有變量的類型更加的安全
auto 自適應(yīng)類型 自動(dòng)類型 根據(jù)你賦的值來確定變量的類型
decltype 一個(gè)括號時(shí)用一個(gè)變量定義同類型的變量 兩個(gè)括號時(shí)該類型的引用
關(guān)于for的一個(gè)用法 for(auto i:arr);遍歷arr數(shù)組中所有的元素
類型別名 C語言typedef typedef int INT typedef 類型 別名
C++ using 別名=類型名
類中成員 一般是在構(gòu)造中賦值 C11可以直接在類中賦值
A()=default;自動(dòng)生成默認(rèn)構(gòu)造
委托 在構(gòu)造中調(diào)用自己的其他構(gòu)造
final 終極類或者終極函數(shù) 不能使用虛函數(shù) 不能派生子類
模板
template<class T> 寫和類型無關(guān)的代碼 調(diào)用的時(shí)候傳入類型
函數(shù)模板 函數(shù)(參數(shù)) 隱性調(diào)用 通過參數(shù)確定T類型
函數(shù)<類型>(參數(shù)) 顯示調(diào)用 直接傳入T的類型
類模板 類名<類型> 對象名
點(diǎn)擊學(xué)習(xí):https://w.url.cn/s/ACjFGu8