第一部分:考点与作答区
考点:
- 类的继承
- 继承的类型(公有、私有、保护)
- 虚函数与多态
作答区: 编写一个C++程序,完成以下要求:
- 定义一个名为
Shape
的类,包含成员变量area
(浮点型)和perimeter
(浮点型)。 - 定义一个名为
Circle
的类,它继承自Shape
类。在Circle
类中,添加一个私有成员变量radius
(浮点型)。 - 在
Circle
类中,定义一个公有成员函数calculateArea
,用于计算圆的面积。 - 在
Circle
类中,定义一个公有成员函数calculatePerimeter
,用于计算圆的周长。 - 在
main
函数中,创建一个Circle
对象,并调用上述成员函数进行操作。
请在下方空白处编写代码:
// 在此处编写代码
第二部分:解题思路与答案
解题思路:
- 首先,定义一个名为
Shape
的类,并为其添加成员变量area
和perimeter
。 - 然后,定义一个名为
Circle
的类,它继承自Shape
类。在Circle
类中,添加一个私有成员变量radius
。 - 在
Circle
类中,定义两个公有成员函数calculateArea
和calculatePerimeter
,用于计算圆的面积和周长。 - 在
main
函数中,创建一个Circle
对象,并调用这些成员函数进行操作。
答案:
#include <iostream>
#include <cmath>
// 定义 Shape 类
class Shape {
public:
virtual void calculateArea() const = 0; // 纯虚函数
virtual void calculatePerimeter() const = 0; // 纯虚函数
};
// 定义 Circle 类,继承自 Shape 类
class Circle : public Shape {
private:
float radius;
public:
// 构造函数
Circle(float r) : radius(r) {}
// 计算面积成员函数
void calculateArea() const override {
std::cout << "Area: " << M_PI * radius * radius << std::endl;
}
// 计算周长成员函数
void calculatePerimeter() const override {
std::cout << "Perimeter: " << 2 * M_PI * radius << std::endl;
}
};
int main() {
// 创建 Circle 对象
Circle circle(5);
// 调用 calculateArea 函数
circle.calculateArea();
// 调用 calculatePerimeter 函数
circle.calculatePerimeter();
return 0;
}
在这段代码中,我们首先定义了一个名为 Shape
的类,并为其添加了两个纯虚函数 calculateArea
和 calculatePerimeter
。然后,我们定义了一个名为 Circle
的类,它继承自 Shape
类。在 Circle
类中,我们添加了一个私有成员变量 radius
,并定义了两个成员函数 calculateArea
和 calculatePerimeter
,用于计算圆的面积和周长。最后,在 main
函数中,我们创建了一个 Circle
对象,并调用了这些成员函数进行操作。
第三部分:扩展考点与扩展作答区
扩展考点:
- 抽象类
- 动态绑定与多态
扩展作答区: 在原有程序的基础上,增加以下功能:
- 修改
Shape
类,使其成为一个抽象类,无法创建Shape
类的对象。 - 定义一个名为
Square
的类,它继承自Shape
类。在Square
类中,添加一个私有成员变量side
(浮点型)。 - 在
Square
类中,重写calculateArea
和calculatePerimeter
函数,以计算正方形的面积和周长。 - 在
main
函数中,创建一个Square
对象,并调用其成员函数进行操作。
请在下方空白处编写代码:
// 在此处编写代码
第四部分:扩展解答思路与答案
扩展解答思路:
- 修改
Shape
类,使其成为一个抽象类,无法创建Shape
类的对象。为此,我们可以在Shape
类中添加两个纯虚函数calculateArea
和calculatePerimeter
。 - 定义一个名为
Square
的类,它继承自Shape
类。在Square
类中,添加一个私有成员变量side
,表示正方形的边长。 - 在
Square
类中,重写calculateArea
和calculatePerimeter
函数,以计算正方形的面积和周长。 - 在
main
函数中,创建一个Square
对象,并调用其成员函数进行操作。
答案:
#include <iostream>
#include <cmath>
// 定义 Shape 类,使其成为一个抽象类
class Shape {
public:
virtual void calculateArea() const = 0; // 纯虚函数
virtual void calculatePerimeter() const = 0; // 纯虚函数
};
// 定义 Square 类,继承自 Shape 类
class Square : public Shape {
private:
float side;
public:
// 构造函数
Square(float s) : side(s) {}
// 计算面积成员函数
void calculateArea() const override {
std::cout << "Area: " << side * side << std::endl;
}
// 计算周长成员函数
void calculatePerimeter() const override {
std::cout << "Perimeter: " << 4 * side << std::endl;
}
};
int main() {
// 创建 Square 对象
Square square(5);
// 调用 calculateArea 函数
square.calculateArea();
// 调用 calculatePerimeter 函数
square.calculatePerimeter();
return 0;
www.shmhrcw.com
www.shypzpw.com
www.shptrcw.com
www.shjdrcw.com
www.shqpzpw.com
}
在这段代码中,我们首先修改了 Shape
类,使其成为一个抽象类,无法创建 Shape
类的对象。然后,我们定义了一个名为 Square
的类,它继承自 Shape
类。在 Square
类中,我们添加了一个私有成员变量 side
,表示正方形的边长,并重写了 calculateArea
和 calculatePerimeter
函数,以计算正方形的面积和周长。最后,在 main
函数中,我们创建了一个 Square
对象,并调用了其成员函数进行操作。