C++泛化类型有两种,举例说明
时间: 2024-10-16 08:04:55 浏览: 12
C++中的四种类型转换
C++中的泛化类型主要体现在抽象基类(Abstract Base Class,简称ABC)的概念上,特别是通过虚函数实现的。这里有两个例子:
1. **抽象基类**[^1]:
```cpp
// 泛化类Shape,定义了一个纯虚函数area()
class Shape {
public:
virtual double area() const = 0; // 纯虚函数,没有实际实现
};
// 具体化类Rectangle和Circle,继承自Shape并实现了area()
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h): width(w), height(h) {}
double area() const override { return width * height; }
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r): radius(r) {}
double area() const override { return M_PI * radius * radius; }
};
```
2. **向上转型(Upcasting)**:
```cpp
Shape* shapePtr; // 存储Shape类型的指针
Rectangle rect(5, 3);
shapePtr = ▭ // 把Rectangle对象赋给Shape指针
// 虽然shapePtr指向的是Rectangle对象,但因为Shape是Rectangle的基类,所以可以调用其area()方法
cout << "Area of the object: " << shapePtr->area() << endl; // 输出:Area of the object: 15
```
在这个例子中,`Shape`是一个泛化类,它的子类`Rectangle`和`Circle`分别实现了`area()`函数,这使得我们可以通过`Shape`类型的指针操作具有特定行为的对象,体现了C++继承的灵活性和代码的复用性。
阅读全文