C++面向对象程序设计这本书的学习已经接近尾声了,在后面的诸多章节中,重点学习了八九十三章。
第八章讲的是运算符重载,C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。运算符重载特别实用,我目前最常用的就是重载输入输出,可以省去很多麻烦,使程序变得更加简洁。
重载运算符的使用必须严谨!!否则就会造成程序混乱。C++规定重载后的运算符的操作对象必须至少有一个是用户定义的类型,使用运算符不能违法运算符原来的句法规则。如不能将% 重载为一个操作数。重载运算符不能修改运算符原先的优先级。不能创建一个新的运算符,例如不能定义operator** (···)。
需要注意的还有不能重载的运算符,如不能进行重载的运算符:成员运算符(.),作用域运算符(::),条件运算符(?:),sizeof运算符,typeid(一个成员指针访问运算符)(.*),const_cast、dynamic_cast、reinterpret_cast、static_cast强制类型转换运算符。大多数运算符可以通过成员函数和非成员函数进行重载但是下面这四种运算符只能通过成函数进行重载:= 赋值运算符,()函数调用运算符,[ ]下标运算符,->通过指针访问类成员的运算符。
另外,重载运算符要灵活、切合实际,比如不要将+运算符重载为交换两个对象的值。
第九章用的最多的是继承,继承就是子继承父。即子类无条件拥有父类全部可继承的属性和方法。被继承的已有类称为基类,派生出的新类称为派生类。
单继承:
class A:public B
{
……
}
多继承:
class A:public B,privateC
{
……
}
第十章说的是多态和虚函数。
多态即同一个实现接口,使用不同的实例而执行不同的操作。也就是同一操作作用于不同的对象,可以产生不同的效果。
多态好处多多,最主要的是可以提高可扩充性和可维护性。
使用多态是有前提的,首先要有接口,其次要有方法重写,最后父类或者父接口引用指向子类。
虚函数表实质是一个指针数组,里面存的是虚函数的函数指针。
当类中含有虚函数的时候,实例化的对象在内存中的首地址就是存放一个指针,这个指针指向虚表(一段存放虚函数的连续的空间,首地址为虚函数的指针),其他实例对象也是的虚指针也是指向此地址。
虚表即当类中含有虚函数的时候,实例化的对象在内存中的首地址就是存放一个指针,这个指针指向虚表(一段存放虚函数的连续的空间,首地址为虚函数的指针),其他实例对象也是的虚指针也是指向此地址。