c++中抽象类中可以有数据成员吗
时间: 2024-01-29 14:03:33 浏览: 130
C++中的抽象类可以包含数据成员,但是通常情况下抽象类中的数据成员应该被声明为 protected 或 private,以便子类可以访问但客户端不能访问。
抽象类中的数据成员通常用于存储子类共有的数据,以避免子类重复定义这些数据成员。例如,如果我们有一个表示几何图形的抽象类 Shape,那么它可以包含一个 protected 的数据成员 color,以便所有子类都可以访问并存储它们的颜色信息。
以下是一个简单的例子,展示了抽象类中的数据成员的使用方法:
```cpp
class Shape {
public:
Shape(string c): color(c) {}
virtual double getArea() = 0;
protected:
string color;
};
class Circle: public Shape {
public:
Circle(double r, string c): Shape(c), radius(r) {}
double getArea() { return 3.14 * radius * radius; }
private:
double radius;
};
class Rectangle: public Shape {
public:
Rectangle(double w, double h, string c): Shape(c), width(w), height(h) {}
double getArea() { return width * height; }
private:
double width;
double height;
};
int main() {
Shape* s1 = new Circle(2.0, "red");
Shape* s2 = new Rectangle(2.0, 3.0, "blue");
cout << "Circle area: " << s1->getArea() << ", color: " << s1->color << endl;
cout << "Rectangle area: " << s2->getArea() << ", color: " << s2->color << endl;
delete s1;
delete s2;
return 0;
}
```
在上面的例子中,我们在抽象类 Shape 中添加了一个 protected 的数据成员 color,以便所有子类都可以访问它。然后我们在子类 Circle 和 Rectangle 中分别定义了它们自己的数据成员,但没有重复定义 color。最后我们在主函数中创建了 Circle 和 Rectangle 的实例,并输出它们的面积和颜色。
阅读全文