首页 > 代码库 > 第五十二课、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++中的抽象类和接口
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。