haoxiaolan 2022-11-14 17:01 采纳率: 34.7%
浏览 10
已结题

c++继承多态方法的重写问题

#include<iostream>
using namespace std;
class Person{
    public:
        string sno;
        string name;
        int age;
    
    Person(){}
    Person(string s,string n,int a){
        sno = s;
        name = n;
        age = a;
    }
    void tostring(){
        cout<<"我叫:"<<name<<"我今年:"<<age<<"我的学号是:"<<sno<<endl;
    }
};

class Student:public Person{
    public:
        string zhuanye;
        Student(){}
        Student(string s,string n,int a,string z):Person(s,n,a){
            zhuanye = z;
        }
        void tostring(){
            cout<<"我叫:"<<name<<"我今年:"<<age<<"我的学号是:"<<sno<<"专业是:"<<zhuanye<<endl;
        }
};
int main(){
    string sno;
    string name;
    int age;
    string zhuanye;
    cout<<"请输入学号"<<endl;
    cin>>sno;
    cout<<"请输入姓名"<<endl;
    cin>>name;
    cout<<"请输入年龄"<<endl;
    cin>>age;
    cout<<"请输入专业"<<endl;
    cin>>zhuanye;
    Student s1= Student(sno,name,age,zhuanye);
    Person &aa=s1;
    aa.tostring();
return 0;
}

结果中不会出现 zhuanye的字段,好像调用的是父类的tostring()方法 。 明明子类重写了tostring()方法,为啥不是调用子类的tostring()方法呀?

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-11-14 17:07
    关注

    必须基类中tostring改为虚函数,才有你说的多态效果

    virtual void tostring(){
            cout<<"我叫:"<<name<<"我今年:"<<age<<"我的学号是:"<<sno<<endl;
        }
    
    

    由于tostring不是虚函数,而aa是Person基类引用,所以只会调用基类的tostring函数

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月15日
  • 已采纳回答 11月15日
  • 创建了问题 11月14日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测