近期学习了运算符重载,组合与继承,还有多态和虚函数。
运算符重载:
实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。同时,运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。
运算符重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。
运算符重载的一般格式为:
函数类型 operator 运算符
{
函数体
}
运算符重载为类的友元函数的一般格式为:
friend 函数类型 operator 运算符
{
函数体
}
运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。
继承:
允许程序员在保持原有类特性的基础上进行扩展和增进功能。这样产生的新类成为派生类。基类和派生类是继承关系,继承权限有三种,分别是:public、private、protected。基类的private成员在派生类中是不能被访问的,如果基类的成员不想被类外直接访问,但需要在派生类中被访问,就定义protected。
同名隐藏发生在继承体系中,基类的一个成员函数和派生类的一个函数的名称相同,然后基类的成员函数在访问的时候就会被隐藏
不能继承友元函数,因为友元函数不是类的成员函数。
多态与虚函数:
有关键字virtual的成员函数是虚函数。
多态分为静态多态和动态多态。静态多态是编译完之后确定所要完成的工作,动态多态就不得不提动态绑定的条件:一是虚函数,基类中必须有虚函数,在派生类中必须重写虚函数;二是,通过基类类型的指针或引用来调用虚函数。
类中的成员函数分为静态成员函数和非静态成员函数,而非静态成员函数又分为普通函数和虚函数。虚函数使用虚函数表和虚函数表指针实现,虚函数表是每个(有虚函数的)类对应一个。虚函数表指针是每个对象对应一个。虚函数表里只能存放虚函数,不能存放普通函数。虚函数的函数入口是动态绑定的。在运行时,程序根据基类指针指向的实际对象,来调用该对象对应版本的函数。