1、 如何使用無參構(gòu)造函數(shù)初始化?
aClass obj(); //error,不能加括號(hào)
aClass obj;
2、聲明為引用的數(shù)據(jù)成員和const數(shù)據(jù)成員必須采用成員初始化列表進(jìn)行初始化。
3、類與const
①const成員函數(shù)定義:在該函數(shù)中不改變調(diào)用他的對(duì)象的值。
eg: void Func() const;
②const成員函數(shù)可重載,根據(jù)對(duì)象是否是const來決定調(diào)用。
③構(gòu)造函數(shù)和析構(gòu)函數(shù)不能聲明為const
④const數(shù)據(jù)成員 必須在構(gòu)造函數(shù)初始化列表中被初始化。
eg: class test
{
test(int i):data(i) {}
……
private:
const int data;
}
注:const對(duì)象的“常量性質(zhì)”在從構(gòu)造函數(shù)完成對(duì)象初始化 到 對(duì)象析構(gòu)函數(shù)被調(diào)用結(jié)束這個(gè)過程之間一直保持。
⑤static成員函數(shù)不能聲明為const。const指示函數(shù)不能修改它操作的對(duì)象的內(nèi)容,但static成員函數(shù)獨(dú)立于類的任何對(duì)象。
⑥不一致使用const
void Func2(int a[])
{
……
}
void Func1(const int a[])
{
Func2(a); //Error,不能將const修改為非const。Func2參數(shù)也該聲明為const
……
} void Func2()vo
4、友元friend,原型在類定義內(nèi)出現(xiàn),但友元不是成員函數(shù),private、protected等與友元無關(guān),因此可以放在類的任何地方。
5、在派生類的構(gòu)造函數(shù)的初始化列表中初始化成員、調(diào)用基類的構(gòu)造函數(shù),可以防止重復(fù)初始化。
6、若一個(gè)類中含virtual函數(shù),則該類的析構(gòu)函數(shù)應(yīng)該為virtual
7、重載復(fù)數(shù)類的+運(yùn)算符。
Complex operator + (const Complex& x,const Complex& y)
{
return (a,b); //此語句調(diào)用下面的構(gòu)造函數(shù)
}
Complex::Complex(const Complex& x,const Comolex& y)
:real(x.real+y.real),imag(x.img+y.img)
{
}
7、臨時(shí)對(duì)象
class X
{……};
X x1(100); //只有它不會(huì)產(chǎn)生臨時(shí)對(duì)象,只有1個(gè)構(gòu)造函數(shù)被調(diào)用
X x2=X(100);
X x3=100;
8、多重繼承
繼承關(guān)系如下圖
產(chǎn)生二義性:如
Engineer eng;
eng.Worker::Sex=0;
eng.Manager::Sex=1;
解決方法:使用虛基類
class Worker:public virtual Employee
{
};
class Manager:public virtual Employer
{
};
類之間的關(guān)系如下圖所示:
不過這樣還是存在問題的,這是c++自身所決定的。