一.函數(shù)
1.函數(shù)重載,函數(shù)覆蓋琐馆,函數(shù)隱藏三者的區(qū)別规阀,概念
函數(shù)重載:在一個類中,函數(shù)與函數(shù)的函數(shù)名相同瘦麸,參數(shù)類型或者參數(shù)的個數(shù)不同
函數(shù)覆蓋:在基類和派生類中谁撼,基類的函數(shù)必須是虛函數(shù),兩個類中的函數(shù)與函數(shù)的函數(shù)名相同滋饲,參數(shù)類型和個數(shù)也完全相同
函數(shù)隱藏:在基類和派生類中厉碟,基類的函數(shù)必須不是虛函數(shù),兩個類中的函數(shù)與函數(shù)的函數(shù)名相同屠缭,參數(shù)類型和個數(shù)不考慮(相同不相同都無所謂)
2.const成員函數(shù)
如果想在一個函數(shù)中不允許修改(全局)的成員變量值箍鼓,那么可以將該函數(shù)定義為const成員函數(shù),如:
[cpp]
int i,k;
void CTestMemCpp::printss() const
{
i=5;
k=5;
}
上面更改了全局的變量i和k,那么編譯器會報錯呵曹。
二.函數(shù)重載
1.概念
函數(shù)重載指的是函數(shù)的參數(shù)個數(shù)或者某個參數(shù)的類型不同就稱為函數(shù)的重載款咖,如
int fun(int a)
int fun(float a)
int fun(int a,double b)
以上三個函數(shù)就是對函數(shù)fun的重載
2.函數(shù)的默認參數(shù)
函數(shù)的的參數(shù)在聲明的時候也可以進行初始化,初始化之后就可以在使用的時候不需要填寫形參
[cpp]
void func(int a,int b,int c=5)
{
cout<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
}
[html] view plain copy print?
main
{
fun(1,2);//a:1 b:2 c:5
func(1,2,3);//a:1 b:2 c:3
}
三.運算符重載
1.概念
c++除了函數(shù)重載還允許重載運算符奄喂,運算符或者說重載后的運算符與類結(jié)合铐殃,產(chǎn)生新的功能
2.為什么使用運算符重載
與類結(jié)合,為了實現(xiàn)類的多態(tài)性
3.聲明定義
返回類型 operator運算符(參數(shù)1砍聊,參數(shù)2背稼。。玻蝌。){}
使用operator關鍵字進行聲明重載運算符
4.前置++和后置++的重載
[cpp]
class CTestMemCpp
{
public:
CTestMemCpp(void);
~CTestMemCpp(void);
int n;
//前置++重載
int operator++()
{
n=0;
++n;
return n;
}
//后置++重載
int operator++(int a)
{
n=0;
int aa=n;
++*this;
return aa;
}
};
[cpp]
CTestMemCpp *cp=new CTestMemCpp();
int a=++*cp;
int b=(*cp)++;
結(jié)果:a=1 b=0
前置++和后置++重載的時候怎么才能讓編譯器區(qū)分出來呢?為了區(qū)分他們词疼,我們需要在后置++的運算符后添加一個int類型的參數(shù)(int a)俯树,這個參數(shù)沒有任何意義,它也不會傳遞到函數(shù)體中贰盗,它只是operator++()函數(shù)設置的一個信號许饿,該信號提醒編譯器,目前添加了參數(shù)的函數(shù)是一個后置自加的運算符函數(shù)
5.兩個對象相加的+運算符重載
[cpp]
class CTestMemCpp
{
public:
CTestMemCpp(void);
~CTestMemCpp(void);
int n;
CTestMemCpp(int a)
{
n=a;
}//對象+重載
CTestMemCpp operator+(CTestMemCpp &cp)
{
return CTestMemCpp(n+cp.n);
}
};
[cpp]
CTestMemCpp cp1(1),cp2(2),cp3;
cp3=cp1+cp2;
int cp3n=cp3.n;
結(jié)果cp3n=3舵盈;
6.使用operator關鍵字將類的對象轉(zhuǎn)換成int類型
使用方法:operator int()
[cpp]
class CTestMemCpp
{
public:
CTestMemCpp(void);
~CTestMemCpp(void);
int n;
CTestMemCpp(int a)
{
n=a;
}
//使用operator關鍵字將類的對象轉(zhuǎn)換成int類型
operator int()
{
return n;
}
}
有3種方式可以得到轉(zhuǎn)換后的結(jié)果
[cpp]
CTestMemCpp cp1(1);
int a1=int(cp1);
int a2=(cp1);
int a3=cp1;
7.c++運算符大部分都可以重載陋率,但是有些不能重載,如:
.
(成員選擇運算符) ::
(作用域限定運算符) *
(指針運算符) ?:
#
上面的五個運算符不能重載秽晚,前三個有特殊意義瓦糟,重載會帶來麻煩,#
是預處理標致赴蝇,不是運算符菩浙,?:
沒有確定性,重載沒意義