下列说法错误的是A. 可以定义指向抽象类的指针和引用,但不能定义抽象类对象 B. 抽象类不能用做参数类型,函数返回类型或显式转换的类型 C. 抽象类只能做为其他类的基类 D. 使用抽象类指针和引用,不能指向派生类对象
时间: 2023-08-18 19:21:51 浏览: 101
B. 抽象类不能用做参数类型、函数返回类型或显式转换的类型,这个说法是错误的。抽象类可以用作参数类型、函数返回类型或显式转换的类型。因为抽象类是一种接口,它定义了一组纯虚函数,这些函数的实现由具体的派生类来完成。在程序中,我们可以通过使用抽象类的指针或引用,来调用这些纯虚函数的实现。下面是一个例子:
```
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
double getArea() {
return 3.14 * radius * radius;
}
private:
double radius;
};
double getTotalArea(Shape** shapes, int n) {
double total = 0;
for (int i = 0; i < n; i++) {
total += shapes[i]->getArea();
}
return total;
}
int main() {
Circle c1, c2;
Shape* shapes[2] = {&c1, &c2};
double totalArea = getTotalArea(shapes, 2);
return 0;
}
```
在这个例子中,Shape 是一个抽象类,定义了一个纯虚函数 getArea()。Circle 是一个派生类,实现了 getArea()。在 getTotalArea() 函数中,使用了 Shape 类型的指针数组来调用 getArea() 函数,这样就可以计算出所有形状的总面积。因此,选项 B 错误。
阅读全文