c++博大精深,封装,继承,多态是c++的三大特征,c++很强大,但是强大的东西理解起来就是要比不强大的难一点,所以现在看看
c++的多态:
多态条件:
1.必须是公有继承。
2.必须是虚函数
一个好的程序要对修改封闭,对扩展开放,虚函数就能很好的解决这个问题,
基类的指针指向子类的对象并调用子类的同名函数,要实现这种效果,就得用虚函数
关键字:virtual
虚函数的注意点:
1.必须是普通成员函数(可以是常成员,不能是静态成员,不能使全局函数)
2.内联函数不会是虚函数
3.构造函数不能为虚函数(析构函数一般声明为为虚函数)
经典例子:
1 #include <iostream> 2 3 using std::cout; 4 using std::cin; 5 using std::endl; 6 7 // 基类 8 class Fruit{ 9 public: 10 virtual void print(){ 11 cout<< "Fruit" <<endl; 12 } 13 }; 14 15 class Banana: public Fruit{ // 一定要共有继承 16 public: 17 void print(){ // 此处可省略virtual关键字,但是函数原型要与Fruit中虚函数 void print(); 完全一致 18 cout<< "Banana" <<endl; 19 } 20 }; 21 22 class Apple: public Fruit{ 23 public: 24 void print(){ 25 cout<< "Apple" <<endl; 26 } 27 }; 28 29 class Pear: public Fruit{ 30 public: 31 void print(){ 32 cout<< "Pear" <<endl; 33 } 34 }; 35 36 class Peach: public Fruit{ 37 public: 38 void print(){ 39 cout<< "Peach" <<endl; 40 } 41 }; 42 43 int main(void) 44 { 45 Banana ban; 46 Apple ape; 47 Pear par; 48 Peach pch; 49 Fruit *frt[] = {&ban, &ape, &par, &pch}; 50 51 for(int i = 0; i < 4; i++) 52 frt[i]->print(); // 一个基类指针,分别调用不同的子类对象(动态多态) 53 54 system("PAUSE"); 55 return 0; 56 }