多态可分为静态多态和动态多态
静态多态就是在系统编译期间 就可以确定程序执行到这里将要执行哪个函数,比如函数的重载 。
动态多态则是利用虚函数实现了运行时的多态 ,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。
虚函数就是在基类中声明该函数是虚拟的(在函数之前加virtual关键字) ,然后在子类中正式的定义(子类中的该函数的函数名,返回值,函数参数个数,参数类型,全都与基类的所声明的虚函数相同,此时才能称为重写,才符合虚函数,否则就是函数的重载),再定义一个指向基类对象的指针,然后使该指针指向由该基类派生的子类对象,再然后用这个指针来调用改虚函数,就能实现动态多态。
下面以"计算器"举例说明:
不使用多态的版本如下:
classCaculator{public: int getResult(charfun){if(fun== '+') return a+b;elseif(fun== '-') return a-b;elseif(fun== '*') return a*b;//增加计算方式时 需要手动增删源代码 } int a; int b;};int main(){ charfun;Caculator x; x.a=5; x.b=10; cin >>fun;cout << x.getResult(fun);}
使用多态的版本如下:
classCaculator//父类计算器 {public:virtualintgetResult(){return0; }inta;intb;};//子类:加法器classAdd :publicCaculator{public:intgetResult(){returna+b; }};//此处省略减法器、乘法器等。intmain(){ Caculator* c =newAdd; c->a=1; c->b=2;cout<< c->getResult() <
可以见得,使用多态的优点有:
1.组织结构清晰
2.可读性强
3.易于扩展,可维护性高 (tips :在实际开发中,提倡扩展而不提倡修改,也正是多态的优势所在)
如果有想学习编程的初学者,可来我们的C/C++技术学习扣qun的哦:58,934,83-89里面免费送整套系统的C/C++教程!
网友评论