溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

const成員函數(shù),內(nèi)聯(lián)函數(shù),友元函數(shù),static成員

發(fā)布時間:2020-06-27 04:46:00 來源:網(wǎng)絡 閱讀:669 作者:龍躍十二 欄目:編程語言

原文鏈接:https://blog.csdn.net/qq_38646470/article/details/79795538
專欄鏈接:https://blog.csdn.net/column/details/20026.html
[TOC]
#1.const成員函數(shù)
const修飾成員函數(shù)
在成員函數(shù)后面加const,const修飾this指針所指向的對象,也就是保證調(diào)用這個const成員函數(shù)的對象在函數(shù)內(nèi)不會被改變。

class Date
{
public :
void Display ()
{
    cout<<"year:" <<_year<< endl;
    cout<<"month:" <<_month<< endl;
    cout<<"day:" <<_day<< endl<<endl ;
}

void Display () const
{
    cout<<"year:" <<_year<< endl;
    cout<<"month:" <<_month<< endl;
    cout<<"day:" <<_day<< endl<<endl;
}
private :
    int _year ; // 年
    int _month ; // 月
    int _day ; // 日
};
void Test ()
{
    Date d1 ;
    d1.Display ();
    const Date d2;
    d2.Display ();
}

? const對象不可以調(diào)用非const成員函數(shù)可以調(diào)用const成員函數(shù)
? 非const對象可以調(diào)用非const成員函數(shù)和const成員函數(shù)
? const成員函數(shù)內(nèi)可以調(diào)用其它的const成員函數(shù)不可以調(diào)用非const成員函數(shù)
?非const成員函數(shù)內(nèi)可以調(diào)用其它的const成員函數(shù)非const成員函數(shù)

#2.內(nèi)聯(lián)函數(shù)
以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時C++編譯器會調(diào)用內(nèi)聯(lián)函數(shù)的地方展開,沒有函數(shù)壓棧的開銷,內(nèi)聯(lián)函數(shù)提升程序運行的效率。

?. inline是一種以空間換時間的做法,省去調(diào)用函數(shù)額開銷。所以代碼很長或者有循環(huán)/遞歸的的函數(shù)不適宜使用內(nèi)聯(lián)。
?. inline對于編譯器而言只是一個建議,編譯器會自動優(yōu)化,如果定義為inline的函數(shù)體內(nèi)有循環(huán)遞歸等等,編譯器優(yōu)化時會忽略掉內(nèi)聯(lián)。
?. inline必須函數(shù)定義放在一起,才能成為內(nèi)聯(lián)函數(shù),僅將inline放在聲明前是不起不作用的。
?. 定義在類內(nèi)的成員函數(shù)默認定義為內(nèi)聯(lián)函數(shù)。

但是在一般的編譯器下看不出內(nèi)聯(lián)函數(shù)的效果,因為編譯器會自動優(yōu)化。接下來給大家在linux下查看。

#3.友元
友元函數(shù):
在C++中友元函數(shù)允許在類外訪問該類中的任何成員,就象成員函數(shù)一樣,友元函數(shù)用關鍵字friend說明。
?. 友元函數(shù)不是類的成員函數(shù)。
?. 友元函數(shù)可以通過對象訪問所有成員,私有和保護成員也一樣。
友元函數(shù):

友元類:

#4.static成員

#5.N中構造拷貝構造的優(yōu)化
看一段代碼:

class AA
{};
AA f (AA a)
{
return a ;
}
void Test1 ()
{
AA a1 ;
a1 = f(a1);
}
void Test2 ()
{
AA a1 ;
AA a2 = f(a1);
}

void Test3 ()
{
AA a1 ;
AA a2 = f(f(a1));
} 

回答下面的問題:
Test1中調(diào)用了次AA的拷貝構造函數(shù)。
Test2中調(diào)用了
次AA的拷貝構造函數(shù)。
Test3中調(diào)用了___次AA的拷貝構造函數(shù)。
const成員函數(shù),內(nèi)聯(lián)函數(shù),友元函數(shù),static成員

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI