努力学习的阿信 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日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站