49-多态的概念和意义
2017-10-30 18:03
211 查看
1、函数重写(override)回顾
2、多态的概念和意义
3、
4、
#include <iostream> #include <string> using namespace std; class Parent { public: virtual void print() { cout << "I'm Parent." << endl; } }; class Child : public Parent { public: void print() { cout << "I'm Child." << endl; } }; void how_to_print(Parent* p) { p->print(); // 展现多态的行为 } int main() { Parent p; Child c; how_to_print(&p); // Expected to print: I'm Parent. how_to_print(&c); // Expected to print: I'm Child. return 0; } I'm Parent. I'm Child.
5、多态意义
但凡涉及重写函数,父类函数一定要定义虚函数,实现多态,否则没意义
6、静态联编和动态联编
#include <iostream> #include <string> using namespace std; class Parent { public: virtual void func() { cout << "void func()" << endl; } virtual void func(int i) { cout << "void func(int i) : " << i << endl; } virtual void func(int i, int j) { cout << "void func(int i, int j) : " << "(" << i << ", " << j << ")" << endl; } }; class Child : public Parent { public: void func(int i, int j) { cout << "void func(int i, int j) : " << i + j << endl; } void func(int i, int j, int k) { cout << "void func(int i, int j, int k) : " << i + j + k << endl; } }; void run(Parent* p) { p->func(1, 2); // 展现多态的特性 // 动态联编 } int main() { Parent p; p.func(); // 静态联编 p.func(1); // 静态联编 p.func(1, 2); // 静态联编 cout << endl; Child c; c.func(1, 2); // 静态联编 cout << endl; run(&p); //动态联编 run(&c); //动态联编 return 0; } void func() void func(int i) : 1 void func(int i, int j) : (1, 2) void func(int i, int j) : 3 void func(int i, int j) : (1, 2) void func(int i, int j) : 3
7、小结
#include <iostream> #include <string> using namespace std; class Boss { public: int fight() { int ret = 10; cout << "Boss::fight() : " << ret << endl; return ret; } }; class Master { public: virtual int eightSwordKill() { int ret = 8; cout << "Master::eightSwordKill() : " << ret << endl; return ret; } }; class NewMaster : public Master { public: int eightSwordKill() { int ret = Master::eightSwordKill() * 2; cout << "NewMaster::eightSwordKill() : " << ret << endl; return ret; } }; void field_pk(Master* master, Boss* boss) { int k = master->eightSwordKill(); int b = boss->fight(); if( k < b ) { cout << "Master is killed..." << endl; } else { cout << "Boss is killed..." << endl; } } int main() { Master master; Boss boss; cout << "Master vs Boss" << endl; field_pk(&master, &boss); cout << "NewMaster vs Boss" << endl; NewMaster newMaster; field_pk(&newMaster, &boss); return 0; } Master vs Boss Master::eightSwordKill() : 8 Boss::fight() : 10 Master is killed... NewMaster vs Boss Master::eightSwordKill() : 8 NewMaster::eightSwordKill() : 16 Boss::fight() : 10 Boss is killed...
相关文章推荐
- 【C++深度剖析教程27】多态的概念与意义
- 多态的概念和意义
- 第49课-多态的概念和意义
- 第49课 多态的概念和意义
- 第四十九课、多态的概念和意义
- 2018/01/07JAVA 基础 / 接口与继承:多态的概念、接口的意义是什么呢?
- 第49课 - 多态的概念和意义
- 抽象类、虚函数、接口、多态 概念与关系的理解
- 浅谈学习C++时用到的【封装继承多态】三个概念
- 操作系统意义上的堆和栈的概念以及数据结构意义上的堆和栈的概念
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- C++ 封装、继承、多态、重载、覆盖、隐藏基本概念详解
- Java 接口 多态概念 知识
- 搞清楚局部和全部,搞清楚逻辑和物理,搞清楚这些对于理解一些组件的概念是非常有意义的:
- 黑马程序员-----多态的概念和条件
- 重写、覆盖、重载、多态几个概念的区别分析
- 关于里氏替换原则与多态概念纠正
- 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
- 面向对象的概念:继承、封装、多态