30、不一样的C++系列--抽象类和接口
来源:互联网 发布:mac 终端哪个好 编辑:程序博客网 时间:2024/06/01 23:20
抽象类和接口
抽象类
面向对象中的抽象类
- 可用于表示现实世界中的抽象概念
- 是一种智能定义类型,而不能产生对象的类
- 只能被继承并重写相关函数
- 直接特征是相关函数没有完整的实现
Shape是现实世界中各种图形的抽象概念
- 因此:
- 程序中必须能够反映抽象的图形
- 程序中通过抽象类表示图形的概念
- 抽象类不能创建对象,只能用于继承
纯虚函数
- C++语言中没有抽象类的概念
- C++中通过纯虚函数实现抽象类
- 纯虚函数是指只定义原型的成员函数
- 一个C++类中存在纯虚函数就成为了抽象类
- 纯虚函数的语法规则:
class Shape{ public: virtual double area() = 0;};
这里 = 0
用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
举一个例子:
#include <iostream>#include <string>using namespace std;//抽象类 Shapeclass Shape{public: //声明一个纯虚函数 virtual double area() = 0;};//继承Shape抽象类class Rect : public Shape{ int ma; int mb;public: Rect(int a, int b) { ma = a; mb = b; } //实现父类的纯虚函数 //然后成为虚函数 double area() { return ma * mb; }};//继承Shape抽象类class Circle : public Shape{ int mr;public: Circle(int r) { mr = r; } //实现父类的纯虚函数 //然后成为虚函数 double area() { return 3.14 * mr * mr; }};//这里使用到多态特性void area(Shape* p){ double r = p->area(); cout << "r = " << r << endl;}int main(){ //定义2个子类 Rect rect(1, 2); Circle circle(10); //传递子类对象,使用多态特性 area(&rect); area(&circle); return 0;}
输出结果为:
r = 2r = 314
这里的Shape抽象类只能用作父类被继承,子类必须实现纯虚函数的具体功能。子类中实现了父类的纯虚函数后成为虚函数。如果子类没有实现纯虚函数,则子类成为抽象类。
接口
- 满足下面条件的C++类则成为接口
- 类中没有定义任何的成员变量
- 所有的成员函数都是公有的
- 所有的成员函数都是纯虚函数
- 接口是一种特殊的抽象类
举个例子:
#include <iostream>#include <string>using namespace std;//定义接口Channelclass Channel{ //没有成员变量public: //所有成员函数都是公有的 //所有成员函数都是纯虚函数 virtual bool open() = 0; virtual void close() = 0; virtual bool send(char* buf, int len) = 0; virtual int receive(char* buf, int len) = 0;};int main(){ return 0;}
阅读全文
0 0
- 30、不一样的C++系列--抽象类和接口
- 抽象类和接口(C#)的区别
- 【C#】抽象类和接口
- [From Network]抽象类和接口(C#)的区别
- [From Network]抽象类和接口(C#)的区别(2)
- 抽象类和接口的区别(C#)
- 抽象类和接口的区别(C#)
- 【C#.NET】C#中抽象类和接口的区别
- C#——接口和抽象类
- C#——抽象类和接口
- 接口的行为抽象和抽象类的行为抽象
- c#/c++什么是接口-接口和抽象类
- c#接口与抽象类的区别
- c#接口与抽象类的区别
- c#接口与抽象类的区别
- c#接口与抽象类的区别
- c#接口与抽象类的区别
- c#接口与抽象类的区别
- gcc生成静态库和动态库
- hiberante O/R映射,注解,查询语言,标准查询,原生SQL,缓存,批处理、,
- 图片懒加载
- location的hash对象
- DM368开发 -- 制作ubifs文件系统
- 30、不一样的C++系列--抽象类和接口
- 第6章 MySQL函数
- .tar.xz解压方式
- ActiveX控件
- 使用Vue.js和Element-UI做一个简单的登录页面
- dialog全局显示的两种方式
- 获取properties文件中的value值
- Codeforces Cheap Travel
- csdn如何转载别人的文章