C++ 语言 虚函数和纯虚函数的区别是什么

C++阿木 发布于 2025-06-14 9 次阅读


阿木博主一句话概括:C++ 虚函数与纯虚函数的区别与应用

阿木博主为你简单介绍:
在面向对象编程中,虚函数和纯虚函数是类继承和多态性的核心概念。本文将深入探讨C++中虚函数与纯虚函数的区别,并通过实例代码展示它们在实际编程中的应用。

一、
C++作为一种面向对象的编程语言,提供了丰富的类和对象特性。虚函数和纯虚函数是C++中实现多态性的关键机制。本文旨在通过对比分析,帮助读者理解这两种函数的区别,并学会在实际项目中正确使用它们。

二、虚函数与纯虚函数的定义
1. 虚函数
虚函数是在基类中声明的函数,在派生类中可以重新定义。当派生类对象通过基类指针或引用调用虚函数时,会根据对象的实际类型调用相应的函数实现,这称为动态绑定或多态。

cpp
class Base {
public:
virtual void display() {
std::cout << "Base display" << std::endl;
}
};

class Derived : public Base {
public:
void display() override {
std::cout << "Derived display" << std::endl;
}
};

2. 纯虚函数
纯虚函数是在基类中声明的虚函数,没有具体的函数实现。它要求派生类必须提供具体的函数实现,否则派生类也将成为抽象类,不能直接实例化对象。

cpp
class Base {
public:
virtual void pureDisplay() = 0; // 纯虚函数
};

class Derived : public Base {
public:
void pureDisplay() override {
std::cout << "Derived pureDisplay" << std::endl;
}
};

三、虚函数与纯虚函数的区别
1. 函数实现
虚函数在基类中可以有具体的实现,而纯虚函数在基类中不能有具体的实现。

2. 抽象类
包含纯虚函数的类称为抽象类,不能直接实例化对象。而包含虚函数的类不是抽象类,可以实例化对象。

3. 继承与实现
派生类可以继承基类的虚函数,并可以选择重写或继承。派生类必须实现基类的纯虚函数,否则派生类也是抽象类。

四、实例分析
以下是一个使用虚函数和纯虚函数的实例,展示了它们在多态性中的应用。

cpp
include
include

// 基类
class Shape {
public:
virtual void draw() const = 0; // 纯虚函数
virtual ~Shape() {} // 虚析构函数
};

// 派生类:矩形
class Rectangle : public Shape {
private:
int width, height;
public:
Rectangle(int w, int h) : width(w), height(h) {}
void draw() const override {
std::cout << "Drawing Rectangle with width " << width << " and height " << height << std::endl;
}
};

// 派生类:圆形
class Circle : public Shape {
private:
int radius;
public:
Circle(int r) : radius(r) {}
void draw() const override {
std::cout << "Drawing Circle with radius " << radius << std::endl;
}
};

int main() {
std::vector shapes;
shapes.push_back(new Rectangle(10, 20));
shapes.push_back(new Circle(5));

for (Shape shape : shapes) {
shape->draw(); // 多态调用
}

// 清理资源
for (Shape shape : shapes) {
delete shape;
}

return 0;
}

五、总结
本文通过对比分析,详细介绍了C++中虚函数与纯虚函数的区别。在实际编程中,正确使用这两种函数可以有效地实现多态性,提高代码的可扩展性和可维护性。希望本文能帮助读者更好地理解并应用虚函数和纯虚函数。