虚函数,覆盖和多态
2017-08-09 09:48
405 查看
虚函数
一.函数声明中的virtual关键字•形如 class 类名 { virtual 返回类型 函数名 (形参表) { … } }; 的成员函数,称为虚函数或方法 –class Shape { public: virtual void draw (void) const { ... } };
覆盖
一.在子类中覆盖基类的虚函数•如果子类的成员函数和基类的虚函数具有相同的函数原型,那么该成员函数就也是虚函数,无论其是否带有virtual关键字,且对基类的虚函数构成覆盖
–class Rectangle : public Shape { public: virtual void draw (void) const { ... } }; –class Circle : public Shape { public: void draw (void) const { ... } };
多态
一.什么是多态•如果子类提供了对基类虚函数的有效覆盖,那么通过一个指向子类对象的基类指针,或者引用子类对象的基类引用,
调用该虚函数,实际被调用的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象称为多态
–Rectangle r (...); Circle c (...); Shape* ps = &r; ps->draw (); // 调用 Rectangle::draw Shape& rs = c; rs.draw (); // 调用Circle::draw
二.多态的意义
•多态的重要意义在于,一般情况下,调用哪个类的成员函数是由调用者指针或引用本身的类型决定的,而当多态发生时,
用哪个类的成员函数则完全由调用者指针或引用的实际目标对象的类型决定。这样一来,源自同一种类型的同一种
激励,竟然可以产生多种不同的响应,谓之多态
–void drawAny (Shape const& shape) { shape.draw (); } –void drawAll (Shape const* shapes[]) { for (size_t i = 0; shapes[i]; ++i) shapes[i]->draw (); }
相关文章推荐
- C++中的重载,隐藏,覆盖,虚函数,多态浅析
- A.4-继承,方法重写(覆盖)(override),虚函数(virtaul)和多态,抽象方法和抽象类abstract,密封类(sealed)和密封方法,常量的定义(const)
- C++多态实现(虚函数,成员函数覆盖、隐藏)
- 重载、虚函数(覆盖、多态)、隐藏 -- 代码示例
- C++继承、虚函数、纯虚函数、多态、覆盖、重载、隐藏、引用等常用概念
- C++多态 & 虚函数 & 虚析构 & 覆盖 & 虚表
- c++(一) 类 对象 重载 继承 多态 构造函数 虚函数 覆盖 纯虚函数等
- 继承与多态---上 --- 函数重写、多态、虚函数、覆盖、隐藏
- 多态相关(虚函数,覆盖,纯虚函数,抽象类)
- 读书笔记-Thinking in C++-第15章 多态和虚函数
- 重载、覆盖、多态与函数隐藏---2
- 虚函数实现多态
- 详解一道C++笔试题,考察重载、覆盖、多态
- 虚函数实现多态(笔记整理)
- 重写、覆盖、重载、多态的区别的分析
- 多态与虚函数 4
- 从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图 .
- C++中类的多态与虚函数的使用
- 面向对象__阶段总结__【覆盖与重载的区别】【继承,多态的一些细节】
- 2.1 C++ 多态 重载 覆盖