C++中的抽象类和接口
1,在 C++ 语言中,并不直接支持面向对象中的抽象类和接口概念,但是 C++ 语言 却可以间接实现这些概念;
2,什么是抽象类:
1,面向对象中的抽象(其实就是分类)概念:
1,在进行面向对象分析时,会发现一些抽象的概念,如图形的面积如何计算?
2,图形类:
1,图形的面积是不能计算的,肯定要问是什么图形的面积(这就是继承);
2,通过分类的方式将实际的图形分为一类,统称为图形(这就是将实际对象抽象,编程抽象类);
3,在现实中需要知道具体的图形类型才能求面积,所以对概念上的“图形求面积没有意义的;
class Shape // 有必要在程序中开发这样一个图形类出来,这样的抽 象概念应该作为父类存在;
{
public:
double area() // 返回当前图形的面积,之后的图形类要重写这个函数;
{
return ;
}
};
4,Shape 只是一个概念上的类型,没有具体对象;
1,必须要保证这一点;
2,架构师告诉所有开发者,Shape 类只能继承,不能创建对象,但是不能保证别人强制执行;
3,要反应现实世界中图形的概念;
3,Shape 类有必要存在吗?
1,有
4,面向对象中的抽象类(现实世界的重要概念,且面向对象理论也支持):
1,可用于表示现实世界中的抽象概念;
2,是一种只能定义类型,而不能产生对象的类;
3,只能被继承并重写相关函数;
1,抽象类作用就只是被继承;
2,设计中,如果一个类是父类,就要考虑它有没有必要成为一个抽象类,判断准则是这个父类有没有必要产生一个对象,没必要则做成抽象类;
4,直接特征是相关函数没有完整的实现;
1,抽象类的特点就是有些函数没有完整实现;
5,Shape 是现实世界中各种图形的抽象概念,因此:
1,程序中必须能够反映抽象的图形;
2,程序中通过抽象类表示图形的概念;
3,抽象类不能创建对象,只能用于继承;
6,抽象类与纯虚函数:
1,C++ 语言中没有抽象类的概念;
2,C++ 中通过纯虚函数实现抽象类;
3,纯虚函数是指只定义原型的成员函数;
1,只有声明就可以;
4,一个 C++ 类中存在纯虚函数就成为了抽象类;
7,纯虚函数的语法规则:
1,代码示例:
class Shape
{
public:
virtual double area() = ;
};
2,“=0” 用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体;
1,如果定义了类对象,编译器直接报错;
8,抽象类初探编程实验:
#include <iostream>
#include <string> using namespace std; class Shape
{
public:
virtual double area() = ;
}; 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 r = p->area(); // 可以用抽象类指针调用子类虚函数;抽象类中的 area() 没有实现,但是子类的 area() 实现了;综上 p 指针指向的只可能是 Shape 这个抽象类的子类,而这个子类肯定必须要实现这个纯虚函数,实现这个纯虚函数后就有函数体就能够调用了,并且纯虚函数也是虚函数,所以说这里可以展现多态; cout << "r = " << r << endl;
} int main()
{
Rect rect(, );
Circle circle(); area(&rect);
area(&circle); return ;
}
9,抽象类与纯虚函数用法:
1,抽象类只能用作父类被继承;
2,子类必须实现纯虚函数的具体功能;
1,必须实现所有的纯虚函数,否知子类依旧是抽象类;
3,纯虚函数被实现后称为虚函数;
4,如果子类没有实现纯虚函数,则子类成为抽象类;
10,满足下面条件的 C++ 类则称为接口:
1,类中没有定义任何的成员变量;
2,所有的成员函数都是共有的;
3,所有的成员函数都是纯虚函数;
4,接口是一种特殊的抽象类;
1,C++ 中没有真正的接口概念,只能通过特殊的抽象类来模拟接口行为;
2,面向对象理论里面,接口是比较抽象的概念,其是一组行为的规范;
3,用程序设计语言说接口比较容易理解,在程序设计语言里面,接口就可以认为是一组函数原型,我们依次作为依据,通过满足上述三个条件的抽象类来得到接口;
4,C++ 中没有真正的接口,但是其后续语言比如 C#、Java 就可以看到接口的概念,后续这两个语言直接支持接口的概念;
11,接口初探编程实验:
#include <iostream>
#include <string> using namespace std; /* 抽象类实现下列四种方式的操作 */
class Channel // 抽象的概念,对应抽象概念;
{
public:
virtual bool open() = ; // 定义一个操作,对应到面向对象中就是一个成员函数;打开;
virtual void close() = ; // 关闭
virtual bool send(char* buf, int len) = ; // 收
virtual int receive(char* buf, int len) = ; // 发
};
1,满足接口的条件,所以是接口;
2,还是抽象类;
3,接口概念在 C++ 中项目和 Qt 课程中应用;
4,接口在面向对象分析与设计、面向对象编程中有重要应用;
1,网络编程:
1,从网络上收数据,处理完了后又从网络上发出去,就是收发的工作;
2,串口编程(这里要重点掌握):
1,将数据从串口发出去,然后再从串口收上来;
3,蓝牙、USB 编程:
1,将数据通过蓝牙、USB 收上来,处理完后,然后再发出去;
5,总结:
1,都是收发,只不过介质不同;
2,介质分别是:以太网、计算机串口、近距离无线编程、USB 口。
6,接口:
1,打开、收、发、关闭。
11,小结:
1,抽象类用于描述现实世界中的抽象概念;
2,抽象类只能被继承不能创建对象;
3,C++ 中没有抽象类的概念;
4,C++ 中通过纯虚函数实现抽象类;
5,类中只存在纯虚函数时成为接口;
6,接口是一种特殊的抽象类;
C++中的抽象类和接口的更多相关文章
- Java 中,抽象类与接口之间有什么不同?
Java 中,抽象类和接口有很多不同之处,但是最重要的一个是 Java 中限制一个 类只能继承一个类,但是可以实现多个接口.抽象类可以很好的定义一个家族类 的默认行为,而接口能更好的定义类型,有助于后 ...
- java中的抽象类和接口
抽象类和接口本身让面向对象真正实现,一个好的系统可以让抽象类或者接口实现多次复用,如果出现了集成具体类那么肯定是有问题的. 抽象类和接口很相似,很多时候好像功能可以混用,java设计者赋予了很多不一样 ...
- 第52课 C++中的抽象类和接口
1. 什么是抽象类 (1)面向对象中的抽象概念 思考:抽象图形中,图形的面积如何计算? (2)现实中:需要知道具体的图形类型,才能求面积. (3)Shape只是一个概念上的类型,没有具体对象 2. 面 ...
- PHP中的抽象类和接口
PHP抽象类和抽象方法的应用 抽象类 接口 多态 抽象类是以特殊的类,接口是一种特殊的抽象类声明抽象类和接口,以及一些需要的技术抽象类: 什么是抽象方法? 定义:如果一个类中的方法 ...
- JAVA中的抽象类与接口
抽象类 abstract class 包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员变量和方法.所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法.当然 ...
- 论Java中的抽象类与接口
目录 抽象类和抽象方法 定义 与普通类的区别以及注意点: 抽象类的作用 接口 定义 示例 注意 作用 最后:接口与抽象类的异同 使用场景 借鉴 抽象类和抽象方法 定义 抽象方法和抽象类都必须被abst ...
- Java 8 中的抽象类和接口到底有啥区别?
上一篇栈长发了这篇<Java 8 有多牛逼?打破一切你对接口的认知!>,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇: 在我们面试时也会经常遇到面试官问抽象类和接口的区 ...
- Java 中的抽象类及接口
抽象类使用 abstract 关键字修饰,该类即为抽象类. 抽象类的作用: 1.某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法. 2.可以从多个具有相同特征的类中抽象出一个抽 ...
- PHP中的抽象类与接口
抽象类 php5支持抽象类和抽象方法.类前加 abstract, 此类就成为抽象类,无法被实例化,此类天生就是用来被继承的,给子类提供了一个类的模板; 类方法前加 abstract,是抽象方法,抽象方 ...
随机推荐
- JS 页面繁简字转换
// 本js用于客户在网站页面选择繁体中文或简体中文显示,默认是正常显示,即简繁体同时显示// 在用户第一次访问网页时,会自动检测客户端语言进行操作并提示.此功能可关闭// 本程序只在UTF8编码下测 ...
- Minor GC与Full GC分别在什么时候发生?
Minor GC 当Eden区没有足够空间进行分配时,虚拟机就会进行一次Minor GC 新生代的垃圾收集动作,采用的是复制算法 对于较大的对象,在Minor GC的时候可以直接进入老年代 Full ...
- PLC 控制系统资源
之前整理的PC高级语言与PLC通讯代码下载链接:三菱:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html倍福:http://bbs.elecfa ...
- 算法 识别有效ip地址和掩码并做统计
题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...
- C#基础提升系列——C# LINQ
C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类En ...
- Mac OS 网络设置教程 wifi设置与宽带设置详解
虽然所有设备连接无线网络的步骤都相差无几,但是Mac与windows系统还是不相同的,那么,苹果Mac怎么连接无线网络呢?针对此问题,本文就为大家介绍Mac网络的设置教程,有兴趣的朋友们可以了解下.如 ...
- python爬取“美团美食”汕头地区的所有店铺信息
一.目的 获取美团美食每个店铺所有的评论信息,并保存到数据库和本地 二.实现步骤 获取所有店铺的poiId 首先观察详情页的url,后面是跟着一串数字的,而这一串数字代表着每个店铺特有的id号,我们称 ...
- 微信小程序中的自定义组件 以及 相关的坑
Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建一个 components 文件夹,用于存放我们以后开发中的所用组件,今天我们的目的是实现一个 首页 组件, ...
- php rtrim()函数 语法
php rtrim()函数 语法 rtrim()函数怎么用? php rtrim()函数用于删除字符串右边的空格或其他预定义字符,语法是rtrim(string,charlist),返回经过charl ...
- window使用
运行命令 regedit #注册表编译器 firewall.cpl #打开防火墙配置 powershell #打开powershell control #打开控制面版 cnpa.cpl #打开网络设置 ...