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

什么是抽象类?

问题:

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 }

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

小结:

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9581731.html