码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-09-04 00:07:07      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:har   names   turn   inf   技术分享   面向   using   public   nbsp   

什么是抽象类?

技术分享图片

技术分享图片

问题:

Shape类有必要存在吗?

抽象类是面向对象中必须支持的。

技术分享图片

 

 

 技术分享图片

 

技术分享图片

 

技术分享图片

 

 抽象类初探:

技术分享图片

编译结果如下:

技术分享图片

 

 

 完善示例:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Shape
 7 {
 8 public:
 9     virtual double area() = 0;
10 };
11 
12 class Rect : public Shape
13 {
14     int ma;
15     int mb;
16 public:
17     Rect(int a, int b)
18     {
19         ma = a;
20         mb = b;
21     }
22     double area()
23     {
24         return ma * mb;
25     }
26 };
27 
28 class Circle : public Shape
29 {
30     int mr;
31 public:
32     Circle(int r)
33     {
34         mr = r;
35     }
36     double area()
37     {
38         return 3.14 * mr * mr;
39     }
40 };
41 
42 void area(Shape* p)
43 {
44     double r = p->area();
45     
46     cout << "r = " << r << endl;
47 }
48 
49 int main()
50 {
51     Rect rect(1, 2);
52     Circle circle(10);
53     
54     area(&rect);
55     area(&circle);
56     
57     return 0;
58 }

纯虚函数要在子类中重写。

运行结果:

技术分享图片

抽象类不能定义对象,但是抽象类可以定义指针。

 

抽象类与纯虚函数:

技术分享图片

 

接口:

技术分享图片

 

C++中没有真正的接口,没有具体的语法支持,后续的语言C#、JAVA有接口。

 接口示例:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Channel
 7 {
 8 public:
 9     virtual bool open() = 0;
10     virtual void close() = 0;
11     virtual bool send(char* buf, int len) = 0;
12     virtual int receive(char* buf, int len) = 0;
13 };
14 
15 int main()
16 {
17     return 0;
18 }

我们只定义了函数,这是一个接口。

 

小结:

技术分享图片

 

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

标签:har   names   turn   inf   技术分享   面向   using   public   nbsp   

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9581731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!