C++虚函数、纯虚函数(抽象函数)

虚函数


虚函数是C++实现动态多态的一种方式,可以使得父类指针指向子类对象,调用虚函数时是调用子类的同名成员函数。

而普通的成员函数没有这个特性,使用父类指针调用方法时无法调用子类函数。

虚函数在类的成员函数前用virtual关键字修饰,可以没有实现,子类也不一定要实现该方法。

如下,父类Animal中有虚函数fun(),子类为Cat和Dog;另一个父类Vehicle中的fun()为普通函数,子类为Car和Bicycle

#include 
using namespace std;

class Animal
{
public:
	virtual void fun() {
		printf("Animal\n");
	}
};

class Dog:public Animal
{
public:
	virtual void fun() {
		printf("Dog\n");
	}
};

class Cat:public Animal
{
public:
	virtual void fun() {
		Animal::fun();
		printf("Cat\n");
	}
};


class Vehicle {
public:
	void fun() {
		printf("Vihecle\n");
	}
};

class Car :public Vehicle {
public:
	void fun() {
		printf("Car\n");
	}
};

class Bicycle :public Vehicle {
public:
	void fun() {
		printf("Bicycle\n");
	}
};

int main()
{
	Animal *a1 = new Dog();
	Animal *a2 = new Cat();
	a1->fun();
	a2->fun();

	Vehicle *v1 = new Car();
	Vehicle *v2 = new Bicycle();
	v1->fun();
	v2->fun();
}

结果:
C++虚函数、纯虚函数(抽象函数)_第1张图片
由于Cat类中写了Animal::fun();所以在输出“Cat”前会输出“Animal”。

纯虚函数


在virtual函数后面写上=0;虚函数就成了纯虚函数,也就是抽象函数,包含抽象函数的类称为抽象类。

抽象函数没有实现,父类不能实例化,子类如果不实现该抽象函数的话也不能实例化,如下:

C++虚函数、纯虚函数(抽象函数)_第2张图片
接口是通过抽象类实现的,接口中只包含抽象函数。

你可能感兴趣的:(C++,c++,多态,抽象类,虚函数)