2018-01-28 高级多态(一)
2018-01-28 本文已影响0人
辣么大大大大
纯虚函数
纯虚函数是必须在派生类中重写的虚函数。通过将虚函数初始化为0来将其声明为纯虚的。
派生类重写所有虚函数,否则它也是ADT。
virtual void draw() = 0;
class Shape
{
public:
Shape() {}
virtual ~Shape() {}
virtual long getArea() = 0;
virtual long getPerim()= 0;
virtual void draw() = 0;
private:
};
虚函数
- 使用虚成员函数实现多态。
- 虚成员函数的工作原理
编译器创建虚成员函数表v-table。根据vptr指针指向的实际对象类型调用正确的函数。 - 不能通过基类指针访问派生类特有的方法。
- 虚析构函数
如果一个函数是虚成员函数,那么析构函数也应该是虚成员函数。 - 使用虚成员函数的代价
维护v-table会带来一些开销。