目录
virtual 在c++中是用来声明虚函数的,它是c++实现多态的重要关键字。
实现多态
#include <iostream>
class Base{
public:
int a;
virtual void fun1(){
std::cout << "base virtual fun1" << std::endl;
}
void fun2(){
std::cout << "base non-virtual fun2" << std::endl;
}
};
class Derived : public Base{
public:
virtual void fun1(){
std::cout << "derived virtual fun1" << std::endl;
}
void fun2(){
std::cout << "derived non-virtual fun2" << std::endl;
}
};
int main(int argc, char** argv) {
Base *base = new Derived;
base->fun2();//打印 base non-virtual fun2
base->fun1();//打印 derived virtual fun1
delete base;
return 0;
}
可以看见在main函数中我们使用“Base *base = new Derived;”创建了一个对象,它是上转型,如果学过Java,在Java中我们常说一个实例化对象它new的类型是什么,它就是什么类型,在c++中也是这样,虽然是Base *base,但是用了new Derived,说明它是Derived类型的,如果是Java那么base访问的成员变量和成员函数都是子类的,与父类无关。但是在c++中向上转型的base子类访问成员函数的话,如果该成员函数不是被virtual修饰的虚函数,那么它调用的就是父类的同名成员函数,就像代码中base->fun2(),它打印的就是 base non-virtual fun2,而