11章 继承和多态
2014-02-19 13:20
288 查看
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,向下转型必须用。
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,向下转型必须用。
相关文章推荐
- 为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?【转】
- UVa 40均匀的生成器
- Maven 入门 (听Q有感笔记)
- 使用吉布斯采样求解LDA模型
- Maven 入门 (听Qunar有感笔记)
- web design tools
- 黑马程序员----IO(Properties集合)
- jquery ajax return没有返回值的解决方法
- 用node.js(socket.io)实现数据实时推送
- Javascript延迟执行函数
- 25 个免费的 HTML5 CSS3 jQuery 下拉菜单,有图有真相,看图更直观!
- CUGB图论专场2:The Bottom of a Graph 强连通Tarjan算法
- 黑马程序员_JAVA 学习笔记21 WEB篇8
- Standby and suspend on memory
- 内存分布图
- asp.net软件工程师课程分享
- HighCharts导出图片和Pdf
- python - easy_install的安装和使用
- CentOS 6.5编译安装httpd-2.4.7
- HttpClient通过代理进行请求