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++中的抽象类和接口的更多相关文章

  1. Java 中,抽象类与接口之间有什么不同?

    Java 中,抽象类和接口有很多不同之处,但是最重要的一个是 Java 中限制一个 类只能继承一个类,但是可以实现多个接口.抽象类可以很好的定义一个家族类 的默认行为,而接口能更好的定义类型,有助于后 ...

  2. java中的抽象类和接口

    抽象类和接口本身让面向对象真正实现,一个好的系统可以让抽象类或者接口实现多次复用,如果出现了集成具体类那么肯定是有问题的. 抽象类和接口很相似,很多时候好像功能可以混用,java设计者赋予了很多不一样 ...

  3. 第52课 C++中的抽象类和接口

    1. 什么是抽象类 (1)面向对象中的抽象概念 思考:抽象图形中,图形的面积如何计算? (2)现实中:需要知道具体的图形类型,才能求面积. (3)Shape只是一个概念上的类型,没有具体对象 2. 面 ...

  4. PHP中的抽象类和接口

    PHP抽象类和抽象方法的应用 抽象类 接口 多态 抽象类是以特殊的类,接口是一种特殊的抽象类声明抽象类和接口,以及一些需要的技术抽象类:    什么是抽象方法?        定义:如果一个类中的方法 ...

  5. JAVA中的抽象类与接口

    抽象类 abstract class 包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员变量和方法.所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法.当然 ...

  6. 论Java中的抽象类与接口

    目录 抽象类和抽象方法 定义 与普通类的区别以及注意点: 抽象类的作用 接口 定义 示例 注意 作用 最后:接口与抽象类的异同 使用场景 借鉴 抽象类和抽象方法 定义 抽象方法和抽象类都必须被abst ...

  7. Java 8 中的抽象类和接口到底有啥区别?

    上一篇栈长发了这篇<Java 8 有多牛逼?打破一切你对接口的认知!>,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇: 在我们面试时也会经常遇到面试官问抽象类和接口的区 ...

  8. Java 中的抽象类及接口

    抽象类使用 abstract 关键字修饰,该类即为抽象类. 抽象类的作用: 1.某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法. 2.可以从多个具有相同特征的类中抽象出一个抽 ...

  9. PHP中的抽象类与接口

    抽象类 php5支持抽象类和抽象方法.类前加 abstract, 此类就成为抽象类,无法被实例化,此类天生就是用来被继承的,给子类提供了一个类的模板; 类方法前加 abstract,是抽象方法,抽象方 ...

随机推荐

  1. centos7配置sudo免密

    1.chmod  +w   /etc/sudoers 2.vim  /etc/sudoers 在已经有了的root下面加 username  ALL=NOPASSWD:ALL      (这是所有的命 ...

  2. canvas 画正方形和圆形

    绘制正方形 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. psfgettable - 从控制台字体中提取出嵌入的Unicode字符表

    总览 psfgettable 字体文件 [输出文件] 描述 psfgettable 命令从一个 .psf 格式的控制台字体中提取出嵌入的 Unicode字符表, 以易读格式输入到一个ASCII文件, ...

  4. resolver - 解析器(resolver) 配置文件

    总览 (SYNOPSIS) /etc/resolv.conf 描述 (DESCRIPTION) 解析器(resolver) 是 C 函数库 中 的 一组 例程, 用于 访问 Internet 域名系统 ...

  5. CentOS7单用户模式修改密码

    以下内容均摘抄自:https://blog.csdn.net/ywd1992/article/details/83538730  亲测有用,谢谢大佬的好文章 1.启动centos系统,并且当在GRUB ...

  6. centos GIT安装

    [注](yum 源仓库里的 Git 版本更新不及时,最新版本的 Git 是 1.8.3.1,但是官方最新版本已经到了 2.9.2.想要安装最新版本的的 Git,只能下载源码进行安装.) 安装git服务 ...

  7. php pdo_mysql扩展安装

    本文内容是以 CentOS 为例,红帽系列的 Linux 方法应该都是如此,下面就详细说明步骤,在这里严重鄙视哪些内容??隆⑺档脑悠咴影说挠泄 PDO 编译安装的文章. 1.进入 PHP 的软件包 p ...

  8. EBCDIC-1025 Russia

  9. 如何去除inline-block的默认间距

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  10. java ArrayList的基本使用

    package java06; /* 数组的长度是不可以发生改变的 Arraylist 集合的长度可以发生改变 对于ArrayList来说,有一个尖括号<E>代表泛型 泛型:就是装在结合中 ...