多态性
来源:互联网 发布:不调用淘宝客api 编辑:程序博客网 时间:2024/06/09 22:33
1绑定是把函数名和函数体关联起来的过程,
2静态多态性又叫编译时多态性,即系统在编译时就确定了通过函数名所调用的函数体(早期联边),它通过函数重载实现
3动态多态性又叫运行时多态性,编译时无法确定绑定对象,必须等到程序运行时才能关联到需要执行的函数体(滞后联边),虚函数和继承
4虚函数用virtual修饰的成员函数,不能是普通函数,在c++中如果在基类中定义了虚函数,那么在其派生类中的同名函数(2者函数原型完全相同)必定也是虚函数。
4虚函数的优点———通过使用指向基类对象的指针或者引用来调用该虚函数可实现动态调用
5动态绑定的2个条件:1是使用虚函数2是使用指向基类的指针或者引用调用该虚函数
#ifndef _SCLASS4_1_CSHAPE_H_#define _SCLASS4_1_CSHAPE_H_#include <iostream>using namespace std;class CShape{public:CShape(double x,double y,double z);~CShape(){};virtual void Show();//动态绑定需要虚函数protected:double m_x;double m_y;double m_z;};class CCircle:virtual public CShape{public:CCircle(double x,double y,double z,double radius);~CCircle(){};void Show();protected:double m_radius;};#endif#include "sclass4_1_CShape.h"CShape::CShape(double x,double y,double z):m_x(x),m_y(y),m_z(z){;}void CShape::Show(){ cout<<"x="<<m_x<<" y="<<m_y<<" z="<<m_z<<endl;}void CCircle::Show(){ cout<<"x="<<m_x<<" y="<<m_y<<" z="<<m_z<<" radius="<<m_radius<<endl;}CCircle::CCircle(double x,double y,double z,double radius):CShape(x,y,z),m_radius(radius){ ;}#include "sclass4_1_CShape.h"void main(){ CShape *p; CShape b(1,2,3); CCircle c(5,54,6,6); p=&b; p->Show(); p=&c; p->Show();//有virtual实现了动态绑定正确调用否则的话Show只能继承来自基类中的Show()无法正确运行 cin.get();}
基类的引用
在.H文件中加上
void Reference(const CShape &abc){abc.Show();}
main函数改为
void main(){CShape a(12,3,4);CCircle b(5,6,7,7);Reference(a);//Reference(b);cin.get();}
0 0
- 多态性
- 多态性
- 多态性!
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 多态性
- 第十三章 while and for Loops
- Qcon2015全球软件开发者大会北京站PPT
- Mysql 锁原理很多和Oracle 相似
- iBatis使用SQLServer出现Can't start a cloned connection while in manual transaction mode.错误
- C#中的ComboBox用法
- 多态性
- viewpager详解
- Java 接口
- [Sicily 1150 1151 1515 魔板] BFS+判重(康托展开)
- zzuoj 10399: F.Turing equation
- 关于SIGCHLD与SIG_IGN应用。
- Android adb不是内部或外部命令
- ONOS 事件处理机制
- EF实体框架初了解