c++学习笔记:多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++学习笔记:多态相关的知识,希望对你有一定的参考价值。

1.多态:通常是指对于同一个消息、同一种调用,在不同的场合,不同的情况下,执行不同的行为--->重载便是简单的多态

------->指同一个操作作用于不同的对象就会产生不同的响应;

多态性分为静态多态性和动态多态性

  其中函数重载和运算符重载属于静态多态性, 虚函数属于动态多态性---->C++是依靠虚函数来实现动态多态的。

2.C++编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数,称为联编:

  1)在编译过程中进行的联编叫静态联编(static binding)或早期联编(early binding)。

  2)在程序运行时完成,动态联编”(dynamic binding)也叫晚期联编(late binding)---->C++通过虚函数来实现动态联编

3.虚函数:vitual

  1.与基类的虚函数有相同的参数个数;

  2.与基类的虚函数有相同的参数类型;

  3.与基类的虚函数有相同的返回类型。

 

  注意点:1.基类的成员函数定义为虚函数,那么,它在所有派生类中也保持为虚函数;即使在派生类中省略了virtual关键字,也仍然是虚函数。

      2.构造函数不可为虚函数--->一旦为虚函数相当于重新,在构造子类时无法找到基类构造函数从而无法构造对象。

      (1. 根据继承的性质,构造函数执行顺序是: A() B() 2. 根据虚函数的性质,如果A的构造函数为虚函数, 且B类也给出了构造函数,则应该只执行B类的构造函数, 不再执行A类的构造函数。这样A就不能构造了。 3. 这样1和2就发生了矛盾.

      3.同名函数不管参数如何,子类会隐藏父类的成员函数

4.  虚函数的访问

  1)对象名的访问:此时取决于对象名的类型---->在类中还可使用作用域符指明

  2)指针访问:指针访问非虚函数时,根据指针本身的类型决定要调用哪个函数,而不是根据指针指向的对象类型; 使用指针访问 虚函数时,编译器根据指针所指对象的类型决定要调用哪个函数(动态联编),而与指针本身的类型无关。------->使用指针访问是虚函数调用的最主要形式

  3)引用访问: 与使用指针访问虚函数类似--->不同:引用一经声明后,引用变量本身无论如何改变,其调用的函数就不会再改变,始终指向其开始定义时的函数。

    ---->受限制的指针。

  

        base obj_base;                //创建基类对象
    base& rBase1 = obj_base;    //声明基类引用,用基类对象初始化
    rBase1.disp();                //基类引用 调用虚函数: 基类中的disp版本

    child obj_child;            //创建派生类对象
    base& rBase2 = obj_child;    //声明基类引用,用派生类对象初始化
    rBase2.disp();                //基类引用 调用虚函数: 派生类中的disp版本

    cout << endl;

    //引用一经声明后,其调用的函数就不会再改变
    rBase1 = obj_child; //引用本身不可以改变, 这里是将obj_child赋值给
                //了rBase1指向的obj_base,相当于obj_base = obj_child;
    rBase1.disp();      //还是调用原来的虚函数: 基类版本    

 

      

以上是关于c++学习笔记:多态的主要内容,如果未能解决你的问题,请参考以下文章

C/C++编程笔记:C++中的函数重载和浮动

[C++]面向对象语言三大特性--多态

[C++]面向对象语言三大特性--多态

effective c++学习笔记

C++笔记:继承和多态实例总结

C++ 类和对象期末复习笔记——多态性