博客
关于我
20170812_继承与多态测试实例
阅读量:84 次
发布时间:2019-02-26

本文共 1423 字,大约阅读时间需要 4 分钟。

20170812_继承与多态测试实例

在C++编程中,多态是指一个同一个名称、形状和大小的函数或函数成员,能够在不同类中被实现。以下是通过多态测试实例的分析和总结。

多态测试实例分析

1. 对象调用

在对象调用中,多态并不生效。具体表现为:调用对象的函数时,直接调用该对象所属类的函数,无论该函数是否为虚函数。

  • 基类对象调用:
base baseObject1;baseObject1.fun(); // 调用基类的非虚函数baseObject1.test(); // 调用基类的虚函数
  • 派生类对象调用:
child childObject1;childObject1.fun(); // 调用派生类的非虚函数childObject1.test(); // 调用派生类的虚函数

结论:对象调用时,函数调用的决定由对象所属类决定,与指针或静态_cast无关。

2. 指针调用(基类指针指向基类对象)

当基类指针指向基类对象时,多态不会生效。

  • 基类指针调用:
base *p_baseObject2 = &baseObject2;p_baseObject2->fun(); // 基类p_baseObject2->test(); // 基类

结论:基类指针指向基类对象时,调用的是基类的函数成员。

3. 指针调用(基类指针指向派生类对象)

当基类指针指向派生类对象时,多态会生效。

  • 基类指针指向派生类对象:
child *p_childObject2 = &childObject2;p_childObject2->fun(); // 派生类p_childObject2->test(); // 派生类

结论:基类指针指向派生类对象时,调用的是派生类的虚函数。

4. 上行转换(派生类指针转基类指针)

上行转换允许将派生类指针转换为基类指针,以下是示例:

  • 派生类指针转基类指针:
child childObject4;child *p_childObject4 = &childObject4;base *p_baseObject4 = static_cast(p_childObject4);p_baseObject4->fun(); // 基类p_baseObject4->test(); // 派生类

结论:上行转换会导致基类指针调用基类的非虚函数,而派生类的虚函数仍然由派生类对象决定。

5. 下行转换(基类指针转派生类指针)

下行转换需要显式强制转换,且编译器不支持隐式转换。

  • 基类指针转派生类指针:
child childObject5;base *p_baseObject5 = &childObject5;child *p_childObject5 = static_cast
(p_baseObject5);p_childObject5->fun(); // 派生类p_childObject5->test(); // 派生类

结论:下行转换会强制将基类指针转换为派生类指针,调用派生类的函数成员。

总结

多态在C++中通过虚函数实现,函数调用的决定取决于以下因素:

  • 对象调用:由对象所属类决定。
  • 指针调用:
    • 基类指针指向基类对象:调用基类函数。
    • 基类指针指向派生类对象:调用派生类虚函数。
  • 转换调用:需要显式转换,决定了函数调用的类。
  • 以上实例通过不同方式展示了多态的特性和行为,帮助理解多态在C++中的应用。

    转载地址:http://pzck.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现Boyer-Moore字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现BP误差逆传播算法(附完整源码)
    查看>>
    Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
    查看>>
    Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
    查看>>
    Objective-C实现bubble sort冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现Burke 抖动算法(附完整源码)
    查看>>
    Objective-C实现Burrows-Wheeler 算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现canny边缘检测算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
    查看>>
    Objective-C实现CIC滤波器(附完整源码)
    查看>>
    Objective-C实现circle sort圆形排序算法(附完整源码)
    查看>>
    Objective-C实现CircularQueue循环队列算法(附完整源码)
    查看>>
    Objective-C实现clearBit清除位算法(附完整源码)
    查看>>
    Objective-C实现climbStairs爬楼梯问题算法(附完整源码)
    查看>>
    Objective-C实现cocktail shaker sort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现cocktailShakerSort鸡尾酒排序算法(附完整源码)
    查看>>