纯虚函数
2016-01-26 13:02
225 查看
正常情况下纯虚函数类似于java中的抽象函数,仅仅提供接口,不提供定义,由不同的子类提供不同的实现,从而表现出多态。可是也有两个特殊的情况。
情况一:纯虚函数也是能够有实现体的。仅仅是因为不能建立基类的对象,因此不能直接调用,可是能够在子类中通过作用域解析操作符静态调用。因此能够在里面加入一些公共的代码。比如:
情况二:对于纯虚析构函数。它和普通的纯虚函数不同的地方在于它必需要提供实现体,这种原因在于,纯虚析构函数终于需要被调用。以析构基类对象,假设不提供该析构函数的实现。将使得在析构过程中,析构无法完毕而导致析构异常的问题。从而在链接阶段错误发生,所以,好的实现方案就是不要把虚析构函数设置为纯虚的
情况一:纯虚函数也是能够有实现体的。仅仅是因为不能建立基类的对象,因此不能直接调用,可是能够在子类中通过作用域解析操作符静态调用。因此能够在里面加入一些公共的代码。比如:
class Base { public: virtual void fun1()=0; }; void Base::fun1() { cout << "Base::fun1"<<endl; } class Derived : public Base { public: virtual void fun1() { Base::fun1();//静态调用 cout << "Derived::fun1"<<endl; } }; int main() { Base* pb= new Derived; pb -> fun1(); delete pb; }
情况二:对于纯虚析构函数。它和普通的纯虚函数不同的地方在于它必需要提供实现体,这种原因在于,纯虚析构函数终于需要被调用。以析构基类对象,假设不提供该析构函数的实现。将使得在析构过程中,析构无法完毕而导致析构异常的问题。从而在链接阶段错误发生,所以,好的实现方案就是不要把虚析构函数设置为纯虚的
相关文章推荐
- 初学unity(初识坐标系)
- codefoces 597C - Subsequences
- ACAccountStore+Extension
- asp.net mvc jQuery 城市二级联动
- @property和@synthesize
- ReactJS入门学习二
- iOS学习之VFL语言简介
- Hello Spring Framework——源(Resources)
- hdu 2500 做一个正气的杭电人
- setter方法和getter方法
- Android 开发规范总结
- Swift2.0笔记1
- Java控制语句——switch语句
- 设计模式:建造者模式
- 为table-row设置border无效解决办法
- hdu 2328 Corporate Identity
- 验证邮箱的正则
- bat 自动执行 SVN 命令
- 动态更新约束问题(SnapKit 的使用)
- AngularJS系列:4、HTML编译器