纯虚函数与虚函数的区别
时间: 2023-09-05 16:11:35 浏览: 53
纯虚函数和虚函数都是在C++中用于实现多态性的重要特性。它们的区别在于:
1. 纯虚函数是抽象的、没有实现的虚函数,它只有声明,没有函数体,因此无法直接调用。纯虚函数通过在基类中声明,迫使所有的派生类都要实现它。而虚函数是有默认实现的,但可以在派生类中重写。
2. 如果一个类中存在纯虚函数,那么这个类就是抽象类,不能被实例化。而虚函数可以有实现,也可以没有实现,有实现的虚函数可以被实例化。
3. 调用纯虚函数时,需要通过指针或引用来调用。而虚函数可以直接调用。
4. 纯虚函数的声明方式为:virtual 返回类型 函数名(参数)= 0; 而虚函数的声明方式为:virtual 返回类型 函数名(参数){ }。
总之,纯虚函数是一种更加抽象的概念,它强制子类必须实现它,从而实现多态性。而虚函数则是一种可以被重写的函数,它的实现可以被子类继承和修改。
相关问题
纯虚函数与虚函数的区别 举例说明
举个例子来说明纯虚函数和虚函数的区别:
```c++
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
virtual void resize() { } // 虚函数,有默认实现
};
class Circle : public Shape {
public:
void draw() override {
// 绘制圆形
}
};
class Square : public Shape {
public:
void draw() override {
// 绘制正方形
}
void resize() override {
// 修改正方形大小
}
};
int main() {
Shape* shape1 = new Circle();
Shape* shape2 = new Square();
shape1->draw(); // 调用 Circle 类的 draw 函数
shape2->draw(); // 调用 Square 类的 draw 函数
shape1->resize(); // 调用 Shape 类的 resize 函数
shape2->resize(); // 调用 Square 类的 resize 函数
return 0;
}
```
在上面的例子中,Shape 类是一个抽象类,因为它包含了一个纯虚函数 draw() = 0。因此,无法直接实例化 Shape 类。Circle 类和Square 类都是Shape 类的子类,并且都必须实现 draw() 函数。由于 Square 类重写了 resize() 函数,因此在调用 shape2->resize() 时会调用 Square 类的 resize() 函数。
总之,纯虚函数和虚函数都是实现多态性的重要特性,它们的区别在于纯虚函数是没有实现的抽象函数,必须在子类中实现,而虚函数有默认实现,可以被子类重写。
纯虚函数与普通虚函数的区别
纯虚函数和普通虚函数都是在C++中用于实现多态性的概念。它们的区别在于:
1. 纯虚函数(Pure Virtual Function)是在基类中声明的虚函数,但没有具体的实现代码,只有函数原型。它的目的是为了让派生类必须实现这个函数。基类中至少有一个纯虚函数,则该基类被称为抽象类,不能被实例化。派生类必须提供纯虚函数的具体实现,否则派生类也会变成抽象类。
2. 普通虚函数(Virtual Function)是在基类中声明并且有默认的实现代码的虚函数。它可以在基类中有默认的行为,但派生类可以选择重写(Override)这个函数来提供自己的实现。派生类不强制必须提供对该函数的实现。
总结来说,纯虚函数是基类强制派生类必须实现的接口,而普通虚函数是基类提供默认实现但允许派生类选择性地进行重写的接口。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)