21xrx.com
2025-04-11 18:31:28 Friday
文章检索 我的文章 写文章
C++中的类继承与组合练习题
2023-07-05 22:28:36 深夜i     19     0
C++ 类继承 组合 练习题 面向对象编程

在C++中,类的继承与组合是两种不同的实现代码复用的方式。本文将通过一些练习题来帮助读者掌握这两个概念。

1. 练习题一:设计一个图形类,包括面积和周长的计算方法,使用继承。

首先,我们需要设计一个基类,名为Shape,包括以下成员变量和方法:

class Shape {
protected:
double area;
double perimeter;
public:
virtual double getArea() const;
virtual double getPerimeter() const;
};

接着,我们可以设计一个矩形类和一个圆形类,分别继承自Shape类。它们分别的实现如下:

class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() const override {
return width * height;
}
double getPerimeter() const override {
return 2 * (width + height);
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() const override {
return 3.14159 * radius * radius;
}
double getPerimeter() const override {
return 2 * 3.14159 * radius;
}
};

通过继承,Rectangle和Circle类分别拥有了Shape类中的面积和周长的计算方法。

2. 练习题二:设计一个汽车类,包括品牌、型号、价格等属性,使用组合。

首先,我们需要设计一个成员类,名为CarInfo,包括以下成员变量和方法:

class CarInfo {
private:
string brand;
string model;
double price;
public:
CarInfo(const string& b, const string& m, double p)
: brand(b), model(m), price(p) {}
const string& getBrand() const return brand;
const string& getModel() const return model;
double getPrice() const return price;
};

接着,我们可以设计一个Car类,包括一个CarInfo对象作为成员变量。它的实现如下:

class Car {
private:
CarInfo info;
public:
Car(const string& b, const string& m, double p) : info(b, m, p) {}
const string& getBrand() const { return info.getBrand(); }
const string& getModel() const { return info.getModel(); }
double getPrice() const { return info.getPrice(); }
};

通过组合,Car类拥有了CarInfo类的品牌、型号、价格等属性。同时,CarInfo类也可作为其他需要这些属性的类的成员变量,实现了代码复用的目的。

综上所述,通过练习题的实现,读者可以更好地理解C++中的类继承与组合的概念和使用方法。希望读者能够通过练习,掌握更多的C++编程知识。

  
  

评论区

请求出错了