c++多态

多态应该是各种面试中都会问的问题了,那么多态肯定很重要,具体有什么作用呢?我在这里记录下我的了解,以后不断补充

封装:隐藏实现的细节,让代码模块化。

继承:可以扩展已经存在的代码模块(类)。

多态:

1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承 
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

就是说你想调用一个函数功能,但是这个功能根据具体的对象实现的过程不同。我们可以先定义一个这类对象共同的属性和功能抽象出一个基类,其中的因对象不同的功能函数就用虚函数,然后具体的子类就继承这个类,并重写虚函数,覆盖父类的虚函数。

这样有什么用呢?

class Base{

public:

virtual void fun(){cout<<"ch1";}

};

class Ch1:public Base{

public:

void fun(){cout<<"ch1";}

};

class Ch2:public Base{

public:

void fun(){cout<<"ch2";}

};

比如我们的程序要调用一个函数fun(),这个对象可能是base,Ch1或Ch2甚至Ch3....

如果我们不用虚函数,调用的话就要判断一下

如果是Base b,这样调用:b.fun();

如果是Ch1 c1,这样调用:c1.fun();

如果是Ch2 c2,这样调用:c2.fun();

如果我们用虚函数

将父类指针指向子类,只要调用父类的fun()就行了

Ch1 c1;

Ch2 c2;

Base *pb;

具体是c1就这样:pb=&c1;

如果是c2就:pb=&c2;

只要调用pb->fun()就能调用具体子类的函数了。

还有就是在函数调用的时候,参数类型是父类型,调用可以是子类型:

void fun(base);//声明

可以这样调用:fun(c1);

返回值应该也是可以的,我没试,时间不够了,下次该改,请大家补充。

原文地址:https://www.cnblogs.com/StormWendy/p/7704597.html