纯虚函数被调用会怎么样
时间: 2023-08-21 22:32:44 浏览: 36
纯虚函数不能被直接调用,因为它没有实现。如果尝试调用一个纯虚函数,会导致链接错误。
然而,纯虚函数可以在派生类中被重载或覆盖。如果派生类没有实现所有的纯虚函数,那么派生类也会变成抽象类,无法被实例化。
下面是一个例子:
```cpp
class Shape {
public:
virtual double getArea() const = 0;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
virtual double getArea() const {
return 3.14 * radius * radius;
}
private:
double radius;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
// 没有实现getArea()
private:
double width, height;
};
int main() {
Shape* s1 = new Circle(2.0);
Shape* s2 = new Rectangle(3.0, 4.0); // 编译错误,Rectangle是抽象类
return 0;
}
```
在上面的例子中,Rectangle没有实现getArea()函数,因此它也成为了一个抽象类,无法被实例化。如果你尝试编译这个程序,会得到一个编译错误。
总之,纯虚函数不能被直接调用,但是必须在派生类中被实现,否则派生类也会变成抽象类。