虚函数
在类的定义中,virtual关键字的成员函数就是虚函数
class base {
virtual int get();
};
int base::get() {}
virtual关键字只用于类定义中的函数声明中,写函数体的时候不用
-
多态表现形式一
派生类的指针可以赋值给基类指针
- 通过基类指针调用基类和派生类中的同名虚函数时:
- 若该指针指向一个基类对象,那么被调用的是基类的虚函数
- 若该指针指向一个派生类的对象,那么被调用的是派生类的虚函数
这种机制叫做“多态”
class CBase {
public:
virtual void vFunction() {}
};
class CDerived : public CBase {
public:
virtual void vFunction() {}
};
main() {
CDerived od;
CBase * p = & od;
p->vFunction(); // 调用哪个虚函数取决于p指向的对象类型
}
多态表现形式二
- 派生类的对象可以赋值给基类的引用
- 通过基类引用调用基类和派生类中的同名虚函数时:
- 若该引用引用的是一个基类对象,那么被调用的是基类的虚函数
- 若该引用引用的是一个派生类的对象,那么被调用的是派生类的虚函数
这种机制叫也做“多态”
class CBase {
public:
virtual void vFunction() {}
};
class CDerived : public CBase {
public:
virtual void vFunction() {}
};
main() {
CDerived od;
CBase & r = od;
r.vFunction(); // 调用哪个虚函数取决于r引用的对象类型
}