什么是抽象类?
问题:
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 }
我们只定义了函数,这是一个接口。
小结: