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. 关于Object.create方法

    ES6最新的Object.create语法是 创造一个对象 可以传参,参数为一个对象,得到的结果是一个克隆的对象, 实际上 这是基于原型的克隆 分析如下: var a={b:1}; var a1 = ...

  2. mpvue中的平台状态判断(H5网页 or 小程序)

    在开发微信小程序或者微信网页H5的时候,有时我们利用外部组件可能不兼容这两者,需要区分开来,可以在对应的mainjs中配置如下 let platform: try{ if(wx){ platform= ...

  3. JavaScript面向对象编程(1)-- 基础

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  4. go语言从例子开始之Example31.定时器

    我们常常需要在后面一个时刻运行 Go 代码,或者在某段时间间隔内重复运行. Go 的内置 定时器 和 打点器 特性让这些很容易实现.我们将先学习定时器,然后再学习打点器. Example: packa ...

  5. 异常 Cannot resolve class or package

    spring boot yml配置异常Cannot resolve class or package 是因为mvaen设置 pom.xml的文件配置如上,scope 范围指定为runtime,runt ...

  6. SVN查看所有人的日志提交记录

    1. svn默认显示最近一周的文件提交和修改记录,怎么查看更长时间的日志记录呢? 2. TortoiseSVN 3. 点击show all 或者NEXT 100,就可显示更长时间的文件提交记录.

  7. 使用Fiddler为满足某些特定格式的网络请求返回mock响应

    假设我想对本地Java程序发起的调用SAP Hybris web service https://jerrywang.com:9002/rest/v2/electronics/users/ 这个网络请 ...

  8. Spring Security 安全认证

    Spring Boot 使用 Mybatis 依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> ...

  9. C/C++ C++ 11 兰姆达

    { auto layer = Layer::create();    auto event = cocos2d::EventListenerTouchOneByOne::create();    ev ...

  10. 本地develop往远端develop上推代码步骤