纯虚函数与虚函数的区别
时间: 2023-09-05 13:11:35 浏览: 93
纯虚函数和虚函数都是在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++代码来举例
纯虚函数和虚函数都是在C++中用于实现多态性的重要概念。虚函数是一个可以被子类重写的函数,而纯虚函数则是一个没有实现的虚函数,必须由子类实现。
下面是一个用C++代码举例说明纯虚函数和虚函数的区别:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
// 纯虚函数
virtual void draw() = 0;
// 虚函数
virtual void print() {
cout << "This is a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "Drawing a circle." << endl;
}
void print() {
cout << "This is a circle." << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw(); // 调用子类的实现
shape->print(); // 调用子类的实现
delete shape;
return 0;
}
```
在上面的代码中,Shape类是一个抽象类,它包含一个纯虚函数draw()和一个虚函数print()。Circle类是Shape类的子类,它实现了draw()函数并重写了print()函数。
在main()函数中,我们创建了一个指向Circle对象的Shape指针,然后调用了它的draw()和print()函数。由于draw()是一个纯虚函数,它必须由子类实现,因此调用的是Circle类的实现。而print()是一个虚函数,它被子类重写了,因此也调用了Circle类的实现。
总之,纯虚函数和虚函数都是用于实现多态性的重要概念,它们的区别在于纯虚函数必须由子类实现,而虚函数可以有默认实现。
阅读全文