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

#include
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<<"我叫:"<"我今年:"<"我的学号是:"<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<<"我叫:"<"我今年:"<"我的学号是:"<"专业是:"<int main(){
    string sno;
    string name;
    int age;
    string zhuanye;
    cout<<"请输入学号"<>sno;
    cout<<"请输入姓名"<>name;
    cout<<"请输入年龄"<>age;
    cout<<"请输入专业"<>zhuanye;
    Student s1= Student(sno,name,age,zhuanye);
    Person &aa=s1;
    aa.tostring();
return 0;
}

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

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

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

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