C++ 抽象基类
2016-04-01 11:15
127 查看
纯虚函数:纯虚函数无须定义,即不需要函数体,只需要在虚函数的参数列表后面添加 = 0;即可。例如:virtual double net(int n) = 0;
抽象基类:含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类。抽象基类负责接口的定义,后续的派生类可以覆盖该接口,即重写虚函数和纯虚函数。注意:由于抽象基类含有纯虚函数,它没有函数体,所以不能对抽象基类进行实例化,只能对其派生类进行实例化。
定义抽象基类是重构的典型应用,重构负责设计类的体系以便将操作或数据移动到另一个类中,而其他派生类的代码无须改动,这就是重构的主要应用。
虚析构函数作用:基类中必须有一个虚析构函数,其派生类就会继承它的虚属性,其作用是当我们delete一个动态对象时,就能保证正确执行析构函数的版本。如果基类不是虚析构函数,那么使用指针或引用动态类型时,delete就会调用基类的析构函数,就会出现删除的对象与动态类型的对象不符合的情况。这样只会释放包含基类的部分,不是基类的部分没有被释放,导致内存泄漏。其运作方式:最深层的派生类class的析构函数最先被调用,然后是其每一个基类的析构函数被调用。
注意: 具有多态性质的基类必须声明一个虚析构函数,如果类不作为基类或多态,就不应该声明虚析构函数。一般使用技巧是,如果成员函数有虚函数,那么就该为这个类声明一个虚析构函数。
抽象基类:含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类。抽象基类负责接口的定义,后续的派生类可以覆盖该接口,即重写虚函数和纯虚函数。注意:由于抽象基类含有纯虚函数,它没有函数体,所以不能对抽象基类进行实例化,只能对其派生类进行实例化。
定义抽象基类是重构的典型应用,重构负责设计类的体系以便将操作或数据移动到另一个类中,而其他派生类的代码无须改动,这就是重构的主要应用。
虚析构函数作用:基类中必须有一个虚析构函数,其派生类就会继承它的虚属性,其作用是当我们delete一个动态对象时,就能保证正确执行析构函数的版本。如果基类不是虚析构函数,那么使用指针或引用动态类型时,delete就会调用基类的析构函数,就会出现删除的对象与动态类型的对象不符合的情况。这样只会释放包含基类的部分,不是基类的部分没有被释放,导致内存泄漏。其运作方式:最深层的派生类class的析构函数最先被调用,然后是其每一个基类的析构函数被调用。
注意: 具有多态性质的基类必须声明一个虚析构函数,如果类不作为基类或多态,就不应该声明虚析构函数。一般使用技巧是,如果成员函数有虚函数,那么就该为这个类声明一个虚析构函数。
相关文章推荐
- C语言运算符优先级记忆
- C语言基础知识
- C++中“->”和“.”在使用中有什么区别呢
- 详解一道C++笔试题,考察重载、覆盖、多态
- C++ 函数传递指针的引用或指针的指针,指针的值被改变
- 定义为指针,声明为数组
- 【设计模式C++】工厂模式
- 【C++】《C++标准程序库》小结第十三章-stream(3)
- c++第2次作业
- C++面试题
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++: How is the process of function calling in C++
- C++ STL中vector、list、deque和map的区别
- C++编译错误syntax error : identifier 'THIS_FILE' 解决方法
- VC++2005下的ADO SQL语句(like,count,distinct)和操作(转)