1. 程式人生 > >c++之函式

c++之函式

1.const成員函式

    const Date d2(d1);或者const Date d2=d1;//拷貝建構函式

void show() const

{

    cout<<_year<<"-"<<_month<<"-"<<_day<<endl;

}

Date* operator&()

{

    return this;

}

const Date* operator&() const//構成過載

{

return this;

}

2.行內函數:沒有壓棧的開銷

inline int add(int a,int b)

{return a+b;}

①以空間換時間,省去呼叫函式額開銷。程式碼很長或者有迴圈或者遞迴的函式不宜使用內聯②inline對於預編譯區而言只是一個建議。編譯器會自動優化,如果定義為inline的函式體內有遞迴等等,編譯器優化時會忽略掉內聯。③inline必須和函式定義在一起,才能成為行內函數,僅將inline放在宣告前是不起作用的。④定義在類內的成員函式預設定義為行內函數。

3.友元

class Date{

friend void show(const Date& d);//友元函式

friend AA;//友元類

friend ostream operator<<(ostream& out);

}

4.static成員

size_t Date::_count=;

static int GetCount()//無this指標

{

return _count;

}

5.N中構造拷貝構造的優化
Test1中呼叫了0次AA的拷貝建構函式,2次AA的賦值運算子函式的過載。
Test2中呼叫了1次AA的拷貝建構函式,2次AA的賦值運算子函式的過載。
Test3中呼叫了1次AA的拷貝建構函式,3次AA的賦值運算子函式的過載。
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));