虚函数:
声明方式:
virtual 返回值类型 成员函数名(形参表);
作用:
虚函数用于实现多态性
例如
首先我们定义一个基类Animal,然后给Animal定义一个派生类Dog;当我们用基类的变量接收一个派生类的对象,调用对象中的方法时,发现执行的是基类的的方法,如果在方法前加上关键字virtual,调用的便是派生类的方法。
#include<iostream>
using namespace std;
//定义一个动物类
class Animal
{
public:
virtual void Call();
};
//定义一个狗类
class Dog :public Animal {
public :
void Call();
};
void Dog::Call() {
cout << "我是一只小狗" << endl;
}
void Animal::Call()
{
cout << "我是一只动物" << endl;
}
int main() {
Animal* a = new Dog();
a->Call();
system("PAUSE");
return 0;
}
虚析构函数
声明方式:
virtual~类名(){};
作用
将派生类的对象赋值给基类的指针变量的时候,指针变量的指针指向的指针只是指向的派生类中的基类部分,从而系统只会执行基类的析构函数,而不执行派生类的析构函数。
例子
```cpp
#include<iostream>
using namespace std;
class Father {
public :
virtual void Fun() {
cout << "父类函数被调用" << endl;
}
virtual ~Father() {
cout << "执行Father的析构函数" << endl;
}
};
class Son :public Father {
public:
void Fun() {
cout << "子类函数被调用" << endl;
}
~Son() {
cout << "执行Son的析构函数" << endl;
}
};
int main() {
Father *a=new Son();
delete a;
//a->Fun();
system("PAUSE");
return 0;
}
没有加virtual:
加了virtual:
纯虚函数
纯虚函数没有函数体,不能被调用,类似于java中的抽象方法;当我们考虑看到派生类中需要某个函数但是暂时又不能实现的时候,可以将其设置为虚函数,让具体功能在派生类中去实现。
声明方式
virtual 返回值类型 函数名(形参表)=0;