C\C++学习 多态总结

1、面向对象的三大特征

面向对象(Object-Oriented,OO)思想"三大特征":多态(Polymorphism),封装(Encapsulation)和继承(Inheritance)

2、什么是多态(Polymorphism)

通过继承,一个类可以被当作不止一个数据类型(type)使用,它可以被用做自身代表的数据类型(这是最常用的),还可以被当作它的任意基类所代表的数据类型,乃至任意接口类   型--前提是这个类实现了这个接口。这一机制称为"多态"。

多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

面向对象语言中,接口的多种不同的实现方式即为多态。

多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。

3、多态是如何实现的

多态机制是依靠继承机制实现的。那么,在常规继承机制的基础之上,在基类中使用virtual函数,并在其派生类中对virtual函数进行override,那么多态机制就自然而然地产生了。

C++中,实现多态有以下方法:虚函数抽象类重载,覆盖,模版。

4、多态的作用

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。

      比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子对象中的任何一个可以赋给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。

     使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象当作基类的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动就找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。

    简单的说,建立一个父类的对象,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个对象调用这个函数的时候,定义这个对象的类(也就是父类)里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用。

  在C++中:

   class A {

  public:

  A() {}

  virtual void foo() {

  cout << "This is A." << endl;

  }

  };

  class B : public A {

  public:

  B() {}

  void foo() {

  cout << "This is B." << endl;

  }

  };

  int main(int argc, char* argv[]) {

   A *a = new B();
   a->foo();
   if(a != NULL)
   delete a;
   return 0;
   }
   这将显示:
   This is B.
   如果把virtual去掉,将显示:
   This is A.
   前面的多态实现使用抽象类,并定义了虚方法.
原文地址:https://www.cnblogs.com/susuzhao/p/2669244.html