#include<iostream> using namespace std; class Student { public: void Print1() { cout << "Student::Print1()" << endl; } virtual void Print2() { cout << "Student::Print2()" << endl; } }; class GStudent :public Student { public: void Print1() { cout << "GStudent::Print1()" << endl; } void Print2() { cout << "GStudent::Print2()" << endl; } }; int main() { Student s1, * ps; GStudent s2; ps = &s1; ps->Print1(); ps->Print2(); ps = &s2; ps->Print1(); ps->Print2(); return 0; }的运行结果及分析
时间: 2024-04-01 20:32:41 浏览: 69
运行结果:
Student::Print1()
Student::Print2()
Student::Print1()
GStudent::Print2()
分析:
在主函数中定义了一个Student类型的对象s1和一个指向Student类型的指针ps,将ps指向s1,并调用ps的Print1和Print2方法,此时输出的是“Student::Print1()”和“Student::Print2()”。
接着定义了一个GStudent类型的对象s2,将ps指向s2,并调用ps的Print1和Print2方法,此时输出的是“Student::Print1()”和“GStudent::Print2()”。
原因是在Student类中,Print1方法没有声明为虚函数,所以无论指向哪个对象,都调用的是Student类中的Print1方法。而Print2方法则被声明为虚函数,GStudent类中对其进行了重写,所以当指向GStudent对象时,调用的是GStudent类中的Print2方法。
相关问题
解释下面代码的意思 #include <string> #include <iostream> using namespace std; class Student { public: void set(int sid, string sname, double sscore) { id = sid; name = sname; score = sscore; } void print() { cout<<"学号:"<<id<<endl; cout<<"姓名:"<<name<<endl; cout<<"分数:"<<score<<endl; } private: int id; string name; double score; };
这段代码定义了一个名为Student的类,该类具有以下成员:
- 一个公有的成员函数set,用于设置学生的学号、姓名和分数。该函数接收三个参数:学号(sid)、姓名(sname)和分数(sscore)。在函数中,学号、姓名和分数的值被赋值给该类的私有成员变量id、name和score。
- 一个公有的成员函数print,用于打印学生的学号、姓名和分数。该函数不接收任何参数,直接将学号、姓名和分数输出到控制台上。
- 一个私有的成员变量id,表示学生的学号。
- 一个私有的成员变量name,表示学生的姓名。
- 一个私有的成员变量score,表示学生的分数。
这个类的目的是用于表示一个学生的信息,包括学号、姓名和分数,并提供了设置和打印这些信息的方法。
#include <string> #include <iostream> using namespace std; class Student { public: void set(int sid, string sname, double sscore) { id = sid; name = sname; score = sscore; } void print( ) { cout<<"学号:"<<id<<endl; cout<<"姓名:"<<name<<endl; cout<<"分数:”<<score= sendl; } private: int id; string name; double score; }; void main ( ) { Student s1, *ps, s2; s1. set (1001, "James", 86); s2. set(1002,"Kate',67); ps=&s2; s1. print); ps->print( ); }
这段代码有一个语法错误,第13行的cout语句中字符串的引号不匹配。应该将该行代码改为:
cout<<"分数:"<<score<<endl;
另外,建议将main函数的返回类型改为int,以符合C++标准。完整的代码如下:
#include <string>
#include <iostream>
using namespace std;
class Student {
public:
void set(int sid, string sname, double sscore) {
id = sid;
name = sname;
score = sscore;
}
void print() {
cout<<"学号:"<<id<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"分数:"<<score<<endl;
}
private:
int id;
string name;
double score;
};
int main() {
Student s1, *ps, s2;
s1.set(1001, "James", 86);
s2.set(1002, "Kate", 67);
ps = &s2;
s1.print();
ps->print();
return 0;
}
阅读全文