11章 继承和多态

来源:互联网 发布:小金口网络问政 编辑:程序博客网 时间:2024/06/05 07:25

1、基类,也即父类,派生类,也即子类。派生类的声明方式:class Circle:public GeometricObject;

2、构造函数调用基类构造函数:Circle::Circle(其中可以添加参数):GeometricObject(其中可以添加参数)。只能在类的实现中调用基类的构造函数,不能再类的声明中调用。

3、函数重定义:可以在派生类里重新定义以及在基类里有的函数。

4、多态:一个函数会在不同的类里被重定义,调用时需要根据具体情况来进行动态调用,此时用到的是虚函数virtual。在运行时确定调用哪个函数的能力称为动态绑定,也即多态。。

为使函数能实现动态绑定,需要:1、在基类中,函数必须声明为虚函数virtual;2、函数中引用对象的变量必须包含对象的地址。

5、抽象函数:virtual double getArea() = 0;= 0指明getArea是个纯虚函数(也即抽象函数),基类里 纯虚函数没有函数体和实现。包含纯虚函数的类为抽象类,同样不能创建对象。

6、动态类型转换:将一个GeometricObject类型的参数转换为Circle类型:

GeometricObject *p = &object//创建了一个指向参数object的指针

Circle *p1 = dynamic_cast<Circle*>(p)//dynamic_cast运算符检查p是否指向一个Circle对象,如果是,对象地址赋给p1,否则p1的值为null

向上转型:将一个派生类指针赋予一个基类指针,例:

GeometricObject *p = new Circle(1);

Circle *p1 = new Circle(2);

p = p1;

//Circle是GeometricObject的派生类

向下转型:反之。p1 = dynamic_cast<Circle*>(p);

向上转型可以不使用dynamic_cast,向下转型必须用。

0 0