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++自身所决定的。