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