C++中的抽象类和接口

时间:2022-12-14 14:26:49

1,在 C++ 语言中,并不直接支持面向对象中的抽象类和接口概念,但是 C++ 语言 却可以间接实现这些概念;

2,什么是抽象类:

1,面向对象中的抽象(其实就是分类)概念:

1,在进行面向对象分析时,会发现一些抽象的概念,如图形的面积如何计算?

2,图形类:

C++中的抽象类和接口

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,接口是一种特殊的抽象类;