说到虚函数(virtual function),如果说没接触过这个概念的人第一次看到肯定是一脸懵逼。但其实虚函数是有非常多的用途的,下面就介绍一下常见虚函数的用途。
虚函数:
先简单说一下虚函数的概念,那些被virtual关键字修饰的类成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),将接口与实现进行分离;通俗解释就是相同函数有着不同的实现,但因个体差异而采用不同的策略。下面来看一段简单的代码:
class Base{
public:
virtual void foo() { cout<<"Base::foo() is called"<<endl; }
};
class Derived : public Base {
public:
void foo() { cout<<"Derived::foo() is called"<<endl; }
};
int main(void) {
Base *b = new Derived();
b->foo(); // b虽然是类型Base的指针 但是实际上指向的是Derived类 所以调用的函数foo是Derived类的
return 0;
}
纯虚函数:
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加"=0",例如:
virtual void func()=0;
拥有纯虚函数的类是不能实例化的,那纯虚函数存在的意义是什么呢?
很多时候,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出猴子、狗、猫等子类,但动物本身直接生成对象明显不合理,所以我们一般将动物声明为纯虚基类。
为基类声明虚析构函数
当一个 派生类对象经由一个基类指针被删除,而该基类带着一个非virtual析构函数时,其结果未有定义。不过一般情况下都是 对象的派生类成分没被销毁,而基类的部分被销毁。造成错误。
析构函数调用运作方式:最深层派生(most derived)的那个类其析构函数最先被调用,然后是 其每一个基类的析构函数被调用。
标准 string和 STL容器都不被设计作为基类使用,所以更别提多态了。
联系人:徐经理
手机:13907330718
电话:0731-22222718
邮箱:hniatcom@163.com
地址: 湖南省株洲市石峰区联诚路79号轨道智谷2号倒班房6楼603室