虚函数和抽象类的使用
时间: 2024-06-19 17:03:20 浏览: 106
虚函数是一种在基类中声明的函数,该函数可以被派生类重新定义。通过使用虚函数,可以实现运行时多态性,即使在编译时期无法确定实际调用哪个函数时,程序也可以在运行时期动态地确定。
抽象类是一种特殊的类,不能直接创建实例对象,只能用于派生其他类。抽象类中包含纯虚函数,这些函数没有实现体,派生类必须实现这些函数才能被实例化。抽象类的主要作用是为了提供一个接口规范,让派生类有一个统一的接口来实现具体的业务逻辑。
使用虚函数和抽象类的主要优点是可以提高代码的复用性和可维护性。在具体应用中,我们经常使用虚函数和抽象类来实现各种设计模式,如工厂模式、装饰器模式、模板方法等。
相关问题
虚函数和抽象类的预习
虚函数是在基类中声明的虚函数,它在派生类中被重新定义,可以通过基类指针或引用来调用派生类中的这个函数。虚函数的作用是实现多态性,即同一个函数在不同的对象中有不同的实现。下面是一个虚函数的例子:
```c++
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a = 0, int b = 0) {
width = a;
height = b;
}
virtual int area() {
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape {
public:
Rectangle( int a = 0, int b = 0):Shape(a, b) { }
int area () {
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
int main() {
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
shape->area();
return 0;
}
```
抽象类是不能被实例化的类,它的存在是为了让其他类去继承它并实现它的纯虚函数。纯虚函数是在基类中声明的虚函数,但是没有实现,它的实现留给该基类的派生类去做。下面是一个抽象类的例子:
```c++
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a = 0, int b = 0) {
width = a;
height = b;
}
virtual int area() = 0;
};
class Rectangle: public Shape {
public:
Rectangle( int a = 0, int b = 0):Shape(a, b) { }
int area () {
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
int main() {
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
shape->area();
return 0;
}
```
虚函数和抽象函数的区别
虚函数是在基类中声明的可以在派生类中被重写的函数,它使用关键字virtual进行声明。派生类必须重写基类中所有的虚函数,否则派生类也将变成抽象类。
抽象函数是只声明而没有实现的函数,它使用关键字abstract进行声明。抽象函数必须被派生类实现,否则派生类也将变成抽象类。抽象函数常常被用作定义接口,让派生类来实现具体的功能。
因此,虚函数和抽象函数的区别在于虚函数是有实现的,但可以在派生类中被重写,而抽象函数只有声明没有实现,必须被派生类实现。
阅读全文