zoukankan      html  css  js  c++  java
  • 父类指针可以指向子类对象,反之则不能

    简单来说,C++的多态就是靠父类指针指向子类对象+虚函数来实现的。父类指针指向子类对象,可以调用子类从父类继承来的那一部分,但如果父类中声明了virtual,则可以调用子类中的方法,这样就实现了多态。而子类指针指向父类对象,可能会调用到父类中没用的方法,因此这是不对的。
    至于两类指针的互换是另一个问题。


    例如:
    class a
    {public:
    int aa};
    class b:public a
    {public:
    int bb;
    }
    从内存的来看
    如a
    ---------|
    |占一个int数据大小--|
    |----(aa数据)------|
    |---------
    而b则是
    ---------|---------
    |占一个int数据大小--|占一个Int数据大小--|
    |从a中继承而来------|---(bb数据----------|
    |------------------
    当定义一个基类类型的指针时
    a *p;这时,这个指针指向的是a类型的数据
    当p指针指向派生类的时候,因为p是a类型的指针,所以*p只解释为a类型数据的长度,即
    ————————-|---------
    |占一个int数据大小--|占一个Int数据大小--|
    |从a中继承而来------|-----(bb数据)-------|
    |------------------
    |------------|------------|
    |-p只指向这个区域_--|

    因此,当基类的指针(P)指向派生类的时候,只能操作派生类中从基类中继承过来的数据。
    指向派生类的指针,因为内存空间比基类长,会导致严重了后果,所以不允许派生类的指针指向基类。而基类的指针可以指向派生类。

    C++的多态性能解决基类指针不能操作派生类的数据成员的问题。
  • 相关阅读:
    printf函数实现的深入剖析
    rhel/centos播放mp3文件
    GRUB(GRand Unified Boot loader)引导加载程序
    NAT DHCP WWW rc.local
    论文 毕业设计 相关 用语 评语
    Linux禁止单用户模式(single)来增强系统安全
    Kernel command using Linux system calls
    GNU-ld链接脚本浅析
    AT&T汇编心得之间接寻址和LEA指令
    Linux 汇编语言开发指南
  • 原文地址:https://www.cnblogs.com/rednodel/p/4122781.html
Copyright © 2011-2022 走看看