C++抽象设计目的
来源:互联网 发布:条形码数据采集器用法 编辑:程序博客网 时间:2024/05/17 16:01
一、纯虚函数定义
1.纯虚函数是在基类中声明的虚函数,首先最起码是在基类中的虚函数
2.纯虚函数在基类中是没有定义的,这里指基类,但任何子类中都要定义该纯虚函数的实现方法
3.在基类中实现纯虚函数的方法是虚函数原型后加“=0”,例如:
virtual void function()=0;
为什么要引入纯虚函数?
1.因为当你顶级基类A有一虚函数play();,而A的子类B也有play();,A的子类C也有play();,这就说明如果顶级基类A中的play();若定义怎么玩是不合理的。因为B有B的玩法C有C的玩法。所以这种情况下定义为纯虚函数目的在于使子类仅仅只是继承函数的接口,告诉子类的设计者“你必须在子类中提供一个纯虚函数的实现,但我不知道你会怎么样实现它”
2.引入纯虚函数,则编译器要求在子类中必须予以重写以实现多态性
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h>#include <math.h>#include <cmath>#include <iostream>using namespace std;class A{public: virtual void play()=0; /*void run() { cout<<"A runing"<<endl; }*/};class B:public A{public: /*void play() { cout<<"B playing"<<endl; }*/};class C:public A{public: /*void play() { cout<<"C playing"<<endl; }*/ };int main(){ //A *a=new B; A a; a.play(); return 0;}
- 1
错误提示A是抽象类,play是纯虚函数
可以看出子类必须对纯虚函数进行实现
二、什么是抽象类
含有纯虚函数的类称为抽象类,它不能生成对象,而且只能是基类
抽象类为什么不能生成对象?
因为抽象类声明了纯虚函数,所以用户不能创建类的纯虚函数实例,只能创建它的派生类的实例
抽象类的作用
将有关的操作作为结果接口组织在一个继承层次结构中,由它为子类提供一个公共的根,子类将具体实现在其基类中作为接口的操作。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h>#include <math.h>#include <cmath>#include <iostream>using namespace std;class A{public: virtual void play()=0; void run() { cout<<"A runing"<<endl; }};class B:public A{public: void play() { cout<<"B playing"<<endl; }};class C:public A{public: void play() { cout<<"C playing"<<endl; }};int main(){ A *b=new B; b->play(); A *c=new C; c->play(); return 0;}
三、归纳ING
1.纯虚函数没有定义
2.纯虚函数是用来规范子类的行为,即接口
3.抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的指针或引用
4.定义纯虚函数就是为了让基类不能实例化,因为实例化并没有意义
5.纯虚函数的引入更加安全:因为它避免了不小心没有去实现的问题,它会提醒子类去做相应的实现
6.纯虚函数的引入更加有效率:编码的效率会提升!
转载:http://blog.csdn.net/w_linux/article/details/70554828
- C++抽象设计目的
- 系统设计的目的
- 谈设计的目的
- 操作系统设计的目的
- 数据仓库的设计目的
- C#--抽象工厂设计模式原理
- C#--抽象工厂设计模式--三层框架
- 引入设计模式的目的
- 设计select的真正目的
- 设计基类的目的
- ASP.NET MVC设计目的
- 设计模式无招胜有招之设计目的
- AbstractFactroy(C#)(抽象工厂)(设计模式)
- 设计模式的实现(C++)------抽象工厂模式(AbstractFactory)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- C语言和设计模式(抽象工厂模式)
- C语言和设计模式(抽象工厂模式)
- C语言和设计模式(抽象工厂模式)
- Ubuntu安装cuDNN
- Unique Paths II
- SPI协议及其工作原理浅析
- find the mincost route
- hiho #1539 : 数组重排3(bfs)
- C++抽象设计目的
- 正则表达式之过滤敏感词
- linux下c语言入门04 main函数的编写
- XML
- 同步函数与异步函数
- 【重磅】微软AI首席科学家邓力:深度学习技术及趋势报告(75页PPT下载)
- 手把手教你利用Jenkins持续集成iOS项目
- 并发无锁队列学习之一
- 状态dp学习、