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