继承、封装、多态是面向对象编程最主要的三个特征,有人说多态是理解C++最难理解的一部分,其实我觉得单单从技术上讲,多态并不难,难的是你需要懂得在何时使用多态,就像封装一样,封装本身不难,难的是你对整个事物和需求的理解,以及如何封装会更好。
多态的最简单使用:关键字virtual,虚函数是实现多态最核心的概念;记住一句话,父类的指针指向子类的对象。这是实现多态最基本的要领。
举个最简单的例子:
父类:Base, 两个子类:firstChild, secondChild;
Base.h
#include <iostream>
class Base {
public:
virtual void shoot() {
std::cout<<"base shoot......"<<std::endl;
}
}
firstChild.h
#include <iostream.h>
#include "Base.h"
class firstChild : public Base {
public :
virtual void shoot() {
std::cout<<"firstChild shoot ......"<<std::endl;
}
}
secondChild.h
#include <iostream>
#include "Base.h"
class secondChild : public Base {
public:
virtual void shoot(){
std::cout<<"secondChild shoot......"<<std::endl;
}
}
在main函数里面调用
#include "Base.h"
#include "firstChild.h"
#include "secondChild.h"
int main(int argc, const char * argv[]){
Base * first = new firstChild(); //父类的指针指向子类的对象
Base * seconf = new secondChild();
first->shoot(); //子类如果覆盖了父类的虚函数,则调用子类的,如果没有覆盖,则调用父类的;
second->shoot();
return 0;
}
输出结果:
firstChild shoot......
secondChild shoot ......