首页 > 代码库 > 第五十二课、c++中的抽象类和接口

第五十二课、c++中的抽象类和接口

一、c++中的抽象类与纯虚函数

1、面向对象中抽象的概念

技术分享

(1)、现实中需要知道具体图形的类型才能求面积

(2)、图形类只是概念上的类型没有具体对象

2、面向对象中的抽象类

(1)、可用于表示现实世界中的抽象概念

(2)、是一种只能定义类型,而不能产生对象的类

(3)、只能被继承并重写相关的函数

(4)、直接特征是相关函数没有完整实现

3、c++中没有抽象类的概念

(1)、c++通过纯虚函数实现抽象类

(2)、纯虚函数是只定义原型的成员函数

(3)、一个c++类中存在纯虚函数就成了抽象类

技术分享

4、抽象类与纯虚函数的特点

(1)、抽象类只能用作父类被继承

(2)、子类必须实现纯虚函数的具体功能

(3)、纯虚函数被实现后成为虚函数

(4)、如果子类没有实现纯虚函数,则子类成为抽象类

#include<iostream>

using namespace std;

//抽象类
class Shape { public: virtual double area() = 0; //纯虚函数 };
//矩形
class Rect : public Shape { private: int ma; int mb; public: Rect(int a, int b) { ma = a; mb = b; } double area() { return ma*mb; } };
//圆
class Circle : public Shape { private: int mr; public: Circle(int r) { mr = r; } double area() { return 3.14*mr*mr; } }; void area(Shape* p)//但是可以定义指针,指向的是子类对象 { double r = p->area();//子类中重写后成为虚函数,展现多态 cout << "r = " << r << endl; } int main() { Rect rect(4, 5); Circle circle(10);

//Shape s;//报错,抽象类不能产生对象 area(
&rect);//20 area(&circle);//314 return 0; }

二、c++类的接口

(1)、类中没有定义任何成员变量

(2)、所有的成员函数都是公有的

(3)、所有的成员函数都是纯虚函数

(4)、接口是一种特殊的抽象类

#include <iostream>
#include <string>

using namespace std;

//类中无成员变量
//特殊的抽象类
class Channel { public://成员函数均为public virtual bool open() = 0;//成员函数均为虚函数 virtual void close() = 0; virtual bool send(char* buf, int len) = 0; virtual int receive(char* buf, int len) = 0; }; int main() { return 0; }

三、小结

(1)、抽象类用于描述现实世界中的抽象概念  

(2)、抽象类只能被继承不能创建对象

(3)、c++中没有抽象类的概念

(4)、c++通过纯虚函数实现抽象类

(5)、类中只存在纯虚函数的时候成为接口

(6)、接口是一种特殊的抽象类

 

第五十二课、c++中的抽象类和接口