博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第52课 C++中的抽象类和接口
阅读量:5882 次
发布时间:2019-06-19

本文共 1619 字,大约阅读时间需要 5 分钟。

1. 什么是抽象类

(1)面向对象中的抽象概念

     

思考:抽象图形中,图形的面积如何计算?

(2)现实中:需要知道具体的图形类型,才能求面积。

(3)Shape只是一个概念上的类型,没有具体对象。

 

2. 面向对象中的抽象类

(1)可用于表示现实世界中的抽象概念

(2)抽象类是一种只能定义类型,而不能产生对象的类

(3)只能被继承重写相关函数

(4)直接特征相关函数没有完整的实现

 

3. 抽象类纯虚函数

(1)C++语言中没有抽象类的概念,它是通过纯虚函数实现抽象类,当一个C++类中存在纯虚函数就成了抽象类

(2)纯虚函数是指只定义原型成员函数

(3)纯虚函数的语法规则virtual double area() = 0;  // “=0”用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。

 

【编程实验】抽象类初探

#include 
using namespace std; //抽象类class Shape{public: virtual double area() = 0; //纯虚函数,没有具体的实现}; //矩形类class Rect : public Shape{ int ma; int mb;public: Rect(int a, int b) { ma = a; mb = b; } //子类中实现纯虚函数 double area() { return ma * mb; }}; //圆类class Circle : public Shape{ int mr;public: Circle(int r) { mr = r; } double area() { return 3.14 * mr * mr; }}; void area(Shape* p){ double ret = p->area(); //多态 cout << "area = " << ret << endl;} int main(){ Rect rect(3, 5); Circle circle(10); area(&rect); area(&circle); return 0;}

 

(4)抽象类只能用作父类被继承

(5)子类必须实现纯虚函数具体功能,如果子类没有实现纯虚函数,则子类也成为抽象类

(6)纯虚函数被实现后成为虚函数

 

4. C++中的接口

(1)没有定义任何的成员变量

(2)所有成员函数都是公有的

(3)所有成员函数都是纯虚函数

(4)接口是一种特殊的抽象类

 

【编程实验】接口初探

#include 
using namespace std; //接口示例class 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;}

 

5. 小结

(1)抽象类用于描述现实世界中的抽象概念

(2)抽象类只用被继承不能被创建对象

(3)C++通过纯虚函数实现抽象类

(4)接口是一种特殊的抽象类,它是只存在纯虚函数的抽象类

(5)C++没有真正的抽象类接口的概念

转载于:https://www.cnblogs.com/hoiday/p/10201115.html

你可能感兴趣的文章
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
js判断checkbox是否选中
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
android app启动过程(转)
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>