C++练习题:继承与多态的概念

第一部分:考点与作答区

考点:

  • 类的继承
  • 继承的类型(公有、私有、保护)
  • 虚函数与多态

作答区: 编写一个C++程序,完成以下要求:

  1. 定义一个名为 Shape 的类,包含成员变量 area(浮点型)和 perimeter(浮点型)。
  2. 定义一个名为 Circle 的类,它继承自 Shape 类。在 Circle 类中,添加一个私有成员变量 radius(浮点型)。
  3. Circle 类中,定义一个公有成员函数 calculateArea,用于计算圆的面积。
  4. Circle 类中,定义一个公有成员函数 calculatePerimeter,用于计算圆的周长。
  5. main 函数中,创建一个 Circle 对象,并调用上述成员函数进行操作。

请在下方空白处编写代码:

// 在此处编写代码
第二部分:解题思路与答案

解题思路:

  1. 首先,定义一个名为 Shape 的类,并为其添加成员变量 areaperimeter
  2. 然后,定义一个名为 Circle 的类,它继承自 Shape 类。在 Circle 类中,添加一个私有成员变量 radius
  3. Circle 类中,定义两个公有成员函数 calculateAreacalculatePerimeter,用于计算圆的面积和周长。
  4. 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 的类,并为其添加了两个纯虚函数 calculateAreacalculatePerimeter。然后,我们定义了一个名为 Circle 的类,它继承自 Shape 类。在 Circle 类中,我们添加了一个私有成员变量 radius,并定义了两个成员函数 calculateAreacalculatePerimeter,用于计算圆的面积和周长。最后,在 main 函数中,我们创建了一个 Circle 对象,并调用了这些成员函数进行操作。

第三部分:扩展考点与扩展作答区

扩展考点:

  • 抽象类
  • 动态绑定与多态

扩展作答区: 在原有程序的基础上,增加以下功能:

  1. 修改 Shape 类,使其成为一个抽象类,无法创建 Shape 类的对象。
  2. 定义一个名为 Square 的类,它继承自 Shape 类。在 Square 类中,添加一个私有成员变量 side(浮点型)。
  3. Square 类中,重写 calculateAreacalculatePerimeter 函数,以计算正方形的面积和周长。
  4. main 函数中,创建一个 Square 对象,并调用其成员函数进行操作。

请在下方空白处编写代码:

// 在此处编写代码
第四部分:扩展解答思路与答案

扩展解答思路:

  1. 修改 Shape 类,使其成为一个抽象类,无法创建 Shape 类的对象。为此,我们可以在 Shape 类中添加两个纯虚函数 calculateAreacalculatePerimeter
  2. 定义一个名为 Square 的类,它继承自 Shape 类。在 Square 类中,添加一个私有成员变量 side,表示正方形的边长。
  3. Square 类中,重写 calculateAreacalculatePerimeter 函数,以计算正方形的面积和周长。
  4. 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,表示正方形的边长,并重写了 calculateAreacalculatePerimeter 函数,以计算正方形的面积和周长。最后,在 main 函数中,我们创建了一个 Square 对象,并调用了其成员函数进行操作。 

 

 

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值