当前位置:实例文章 » 其他实例» [文章]C++的虚函数与纯虚函数

C++的虚函数与纯虚函数

发布人:shili8 发布时间:2025-02-03 08:38 阅读次数:0

**C++中的虚函数与纯虚函数**

在C++中,虚函数(virtual function)和纯虚函数(pure virtual function)是面向对象编程的重要概念。它们允许我们定义类之间的接口,而不必关心具体实现细节。

### 虚函数虚函数是一种可以被子类重写的函数。它通过在类中使用`virtual`关键字来标记。虚函数的主要特点是:

* 子类可以重写父类中的虚函数。
* 当我们创建一个指向父类的指针,并调用其虚函数时,实际调用的函数是子类中的实现。

示例代码:

cppclass Animal {
public:
 virtual void sound() { // 虚函数 std::cout << "动物会叫" << std::endl;
 }
};

class Dog : public Animal {
public:
 void sound() override { // 重写父类的虚函数 std::cout << "狗会叫" << std::endl;
 }
};

int main() {
 Animal* animal = new Dog(); // 创建一个指向Dog的Animal指针 animal->sound(); // 调用虚函数,实际调用的函数是Dog中的实现 return0;
}

在这个例子中,我们定义了一个`Animal`类,它包含一个虚函数`sound()`。然后我们创建了一个`Dog`类,它继承自`Animal`并重写了`sound()`函数。在`main()`函数中,我们创建了一个指向`Dog`的`Animal`指针,并调用其`sound()`函数。由于`sound()`是虚函数,实际调用的函数是`Dog`中的实现。

### 纯虚函数纯虚函数是一种特殊类型的虚函数,它不提供任何具体实现,而只定义了一个接口。它通过在类中使用`=0`来标记。纯虚函数的主要特点是:

* 子类必须重写父类中的纯虚函数。
* 当我们创建一个指向父类的指针,并调用其纯虚函数时,编译器会报错。

示例代码:
cppclass Shape {
public:
 virtual void draw() =0; // 纯虚函数};

class Circle : public Shape {
public:
 void draw() override { // 重写父类的纯虚函数 std::cout << "绘制一个圆" << std::endl;
 }
};

int main() {
 Shape* shape = new Circle(); // 创建一个指向Circle的Shape指针 shape->draw(); // 调用纯虚函数,编译器会报错 return0;
}

在这个例子中,我们定义了一个`Shape`类,它包含一个纯虚函数`draw()`。然后我们创建了一个`Circle`类,它继承自`Shape`并重写了`draw()`函数。在`main()`函数中,我们创建了一个指向`Circle`的`Shape`指针,并调用其`draw()`函数。由于`draw()`是纯虚函数,编译器会报错。

### 总结在C++中,虚函数和纯虚函数是面向对象编程的重要概念,它们允许我们定义类之间的接口,而不必关心具体实现细节。虚函数可以被子类重写,而纯虚函数必须被子类重写。通过使用虚函数和纯虚函数,我们可以创建更灵活、更易于维护的代码结构。

### 参考* C++ Primer Plus(第5版)
* Effective C++(第3版)
* Modern C++ Design(第2版)

相关标签:c++开发语言
其他信息

其他资源

Top