c++之函式
阿新 • • 發佈:2018-11-01
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));
}