努力学习的阿信 2021-03-28 11:52 采纳率: 90%
浏览 25
已结题

C++ 使用同一种访问形式访问基类、派生类的同名、同参数、类型的函数

#include<iostream>
using namespace std;
class Student{
    private:
        int num;
    public:
        Student(int a){
            num = a;
        }
        void display(){
            cout<<"num:"<<num<<"\n";
        }
}:
class Gradute:public Student{
    private:
        float wage;
    public:
        Gradute(int a,float b):Student(a){
            wage = b;
        }
        void display(){
            cout<<"num :"<<num<<"  "<<"wage :"<<wage<<endl;
        }

};
int main(){
    Student stud(11111);
    Gradute grad(22222,1500);
    Student *ptr;

    ptr = &stud;
    ptr->display();

    ptr = &grad;
    ptr->display();

    return 0;
}

声明指向基类的指针ptr,可以访问基类的成员函数display函数,但把Gradute类的对象地址赋给指针ptr,再去使用ptr访问display函数,访问的display函数依旧是基类中的函数,这是为什么?明明已经将Gradute类对象的地址赋给指针了呀,如果不允许将指向基类的指针指向派生类对象,那么在将派生类对象地址赋给指针的时候为什么不会报错?

  • 写回答

3条回答 默认 最新

  • 泡视界 2021-03-29 16:38
    关注

    朋友,当成员函数不是虚函数的时候,通过指针调用成员函数只看指针的类型,是基类指针就调基类成员函数。

    当基类的成员函数是虚函数的时候,通过指针调用成员函数只看指针指向的对象的类型,指向派生类就会调用派生类的成员函数。

    所以你如果想用基类指针指向派生类对象,调用派生类对象的成员函数,

    你只需要将基类的同名函数定义为虚函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日

悬赏问题

  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败