3-V2-类和对象 -- const内联 静态成员 友元
const修飾成員函數(shù)
在成員函數(shù)后面加一個(gè)const, const修飾this指針指向的對象, 保證調(diào)用這個(gè)const成員函數(shù)的對象在函數(shù)內(nèi)不會(huì)被改變
注意:成員函數(shù)如果不修改成員變量,則加上const,成員函數(shù)如果要修改成員變量,此時(shí)就不能給其加上const修飾了
1.const對象不能調(diào)用非const成員函數(shù),可以調(diào)用const成員函數(shù)
2.非const對象可以調(diào)用非const成員函數(shù)和const成員函數(shù)
3.const成員函數(shù)可以調(diào)用其他的const成員函數(shù),但是不能調(diào)用其他的非const成員函數(shù)
4.非const成員函數(shù)內(nèi)可以調(diào)用其他const成員函數(shù)和非const成員函數(shù)
總結(jié)一下,對象在調(diào)用成員函數(shù)的時(shí)候作用域只能縮小,不能增大.
inline內(nèi)聯(lián)
用inline關(guān)鍵字修飾的函數(shù) 叫做內(nèi)斂函數(shù),編譯器在進(jìn)行編譯的時(shí)候,會(huì)在調(diào)用該函數(shù)的地方將該函數(shù)進(jìn)行展開, 沒有函數(shù)的壓棧過程,因此內(nèi)聯(lián)函數(shù)運(yùn)行效率較高
1.inline是一種以空間換時(shí)間的做法, 省去了調(diào)用函數(shù)時(shí)候的壓棧開銷, 因此循環(huán)遞歸等不適宜內(nèi)聯(lián)函數(shù)
2.內(nèi)聯(lián)函數(shù)只是一個(gè)建議,編譯會(huì)將其自動(dòng)優(yōu)化,如果涉及到的函數(shù)是遞歸循環(huán)等, 編譯器會(huì)將內(nèi)聯(lián)忽略
3.定義在類內(nèi)的函數(shù)默認(rèn)為是內(nèi)聯(lián)函數(shù)
宏的優(yōu)點(diǎn)以及缺點(diǎn)
宏的優(yōu)點(diǎn)
增加代碼的復(fù)用性,提高性能
宏的缺點(diǎn)
宏不方便調(diào)試,因?yàn)楹甑恼归_是在預(yù)處理階段對其進(jìn)行展開的
宏的可讀性較差,可維護(hù)性較差, 如果不注意會(huì)導(dǎo)致錯(cuò)誤
宏無類型,安全機(jī)制較差
友元
友元函數(shù):突破類的封裝過程
在c++中友元函數(shù)允許在類外訪問該雷的所有成員函數(shù),就像成員函數(shù)一樣, 友元函數(shù)只需要在該函數(shù)前面加上關(guān)鍵字friend
友元函數(shù)可以通過對象訪問所有成員,私有和保護(hù)也一樣
友元類:
有兩個(gè)類 A 和 B, 其中A類的私有成員之一是B類的一個(gè)對象, 此時(shí)此時(shí)A類就是B類的友元類
class Date {friend void Show(const Date& d);friend ostream& operator << (ostream& out, const Date& d);friend istream& operator >> (istream& in, Date& d);friend class Time; public:Date(int year = 1900, int month = 1, int day = 1):_year(year),_month(month),_day(day){cout << "Date(int year = 1900, int month = 1, int day = 1)" << endl;}void Display(){cout << _year << "-" << _month << "-" << _day << endl;}~Date(){cout << "~Date()" << endl;}Date(const Date& d){this -> _year = d._year;this -> _month = d._month;this -> _day = d._day;cout << "Date(const Date& d)" << endl;}Date& operator = (const Date& d){this -> _year = d._year;this -> _month = d._month;this -> _day = d._day;cout << "Date& operator = (const Date& d)" << endl;return *this;} private:int _year;int _month;int _day; };class Time { public:Time(int year = 1900, int month = 1, int day = 1, int hour = 0, int minute = 0, int second = 0):_hour(hour),_minute(minute),_second(second){_d._year = year;_d._month = month;_d._day = day;}void Show(){cout << _d._year << "-" << _d._month << "-" << _d._day << endl;cout << _hour << ":" << _minute << ":" << _second << endl;} private:int _hour;int _minute;int _second;Date _d; };注意: 不是任何時(shí)候友元都比較好, 我們應(yīng)該知道友元是對類的封裝的一個(gè)突破, 所以應(yīng)在下檔的時(shí)候使用.
類的靜態(tài)成員
類里面的成員用static 關(guān)鍵字進(jìn)行修飾的都叫做靜態(tài)成員. 其中靜態(tài)成員是屬于這個(gè)類的不屬于某個(gè)對象,即static成員屬于這個(gè)類的所有對象,不被某個(gè)對象所獨(dú)有
靜態(tài)成員函數(shù)沒有隱含的this指針,那么在訪問靜態(tài)成員函數(shù)的時(shí)候只需要使用了類型::作用域訪問符便可以調(diào)用該靜態(tài)成員函數(shù)
注意靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員,但是非靜態(tài)成員函數(shù)可以訪問靜態(tài)成員
幾個(gè)小細(xì)節(jié)
1.匿名對象(date())存在的生命周期是它所在的那一行, 同時(shí)也要注意當(dāng)我們已經(jīng)自己寫了拷貝構(gòu)造函數(shù)的時(shí)候, 此時(shí)編譯器就不會(huì)自動(dòng)生成構(gòu)造函數(shù)
2.等號兩邊兩個(gè)類型不同的時(shí)候小類型會(huì)轉(zhuǎn)向大類型
3.在寫工程時(shí),為什么.cpp和.h分開
(1)方便閱讀
(2)封裝(開源和閉源)
(3)提高編譯速度
總結(jié)
以上是生活随笔為你收集整理的3-V2-类和对象 -- const内联 静态成员 友元的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: avalon1.4*中文input的 m
- 下一篇: 多态相关概念