(a)编写一个抽象类student,仅在public中包含一个纯虚函数printScore; (b)编写一个高中生类senior,公共继承自student;数据成员包括物理和化学课成绩:physics和chemistry,都是double类型;编写构造函数;编写函数printScore打印这两门课的成绩; (c)编写一个大学生college类,公共继承自senior,数据成员包括面向对象课成绩:OOP,double类型;编写构造函数;编写函数printScore打印物理、化学和面向对象的成绩。 (d)主函数中定义一个senior对象,物理和化学课成绩分别为85和90;定义一个college对象,物理、化学,以及面向对象课成绩分别为85、90和95,利用多态调用printScore函数打印两个对象的成绩。
时间: 2024-02-17 12:01:21 浏览: 2
下面是题目要求的抽象类`student`的定义:
```c++
class student {
public:
virtual void printScore() = 0; // 纯虚函数
virtual ~student() {} // 虚析构函数
};
```
`senior`类的定义:
```c++
class senior : public student {
public:
double physics; // 物理成绩
double chemistry; // 化学成绩
senior(double p, double c) : physics(p), chemistry(c) {}
void printScore() override {
std::cout << "物理成绩: " << physics << ", 化学成绩: " << chemistry << std::endl;
}
};
```
`college`类的定义:
```c++
class college : public senior {
public:
double OOP; // 面向对象成绩
college(double p, double c, double o) : senior(p, c), OOP(o) {}
void printScore() override {
std::cout << "物理成绩: " << physics << ", 化学成绩: " << chemistry << ", OOP成绩: " << OOP << std::endl;
}
};
```
在`senior`和`college`类中,我们都实现了`printScore`函数,用于打印成绩。`college`类继承自`senior`类,所以可以使用`senior`类中的成员变量,同时还有自己的成员变量`OOP`。需要注意的是,在`student`类中,我们加入了一个虚析构函数,这是为了让派生类的析构函数能够正常被调用。
下面是主函数中的代码:
```c++
int main() {
senior s(85, 90);
college c(85, 90, 95);
student* p1 = &s;
student* p2 = &c;
p1->printScore(); // 调用senior的printScore函数
p2->printScore(); // 调用college的printScore函数
return 0;
}
```
在主函数中,我们定义了一个`senior`对象`s`和一个`college`对象`c`,然后使用基类指针`student*`指向这两个对象。由于`printScore`是虚函数,所以在运行时可以根据实际对象类型来调用相应的函数。