1、什么是抽象类
1.1、
面向对象中的
抽象
概念
1.2、
现实中:需要知道具体的图形类型,才能求面积。
1.3、
Shape只是一个
概念上的类型
,
没有具体对象
2、面向对象中的抽象类
2.1、
可用于
表示
现实世界中的
抽象概念
2.2、
是一种
只能定义类型
,而
不能产生对象
的类
2.3、
只能被继承
并重写相关函数
2.4、
直接特征是
相关函数没有完整的实现
3、抽象类与纯虚函数
3.1、C++语言中没有抽象类的概念,
它是
通过纯虚函数实现
抽象类,当一个C++类中存在纯虚函数就成了抽象类
3.2、
纯虚函数
是指
只定义原型
的成员函数
3.3、
纯虚函数的
语法规则
:
virtual double area() = 0;
//
“=0”
用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
/***************** 抽象类初探 **************/
#include <iostream>
using namespace std;
//抽象类
class Shape
{
public:
virtual double area() = 0; //纯虚函数,没有具体的实现
};
//矩形类
class Rect : public Shape
{
int ma;
int mb;
public:
Rect(int a, int b)
{
ma = a;
mb = b;
}
//子类中实现纯虚函数
double area()
{
return ma * mb;
}
};
//圆类
class Circle : public Shape
{
int mr;
public:
Circle(int r)
{
mr = r;
}
//子类中实现纯虚函数
double area()
{
return 3.14 * mr * mr;
}
};
void area(Shape* p) //根据实际对象类型,调用相应函数。
{
double ret = p->area();//多态,根据对象的this指针
cout << "area = " << ret << endl;
}
int main()
{
Rect rect(3, 5);
Circle circle(10);
area(&rect);
area(&circle);
return 0;
}
3.4、
抽象类
只能用作父类
被继承
3.5、
子类
必须实现纯虚函数
的具体功能,如果
子类没有实现纯虚函数
,则子类也成为
抽象类
。
3.6、
纯虚函数
被实现后
成为虚函数(具备继承,多态,重写)
4、C++中的接口
4.1、类中
没有定义任何的成员变量
4.2、所有的
成员函数都是公有的
4.3、
所有的
成员函数都是纯虚函数
4.4、
接口
是一种
特殊的抽象类
#include <iostream>
using namespace std;
//接口示例
class Channel
{
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;
}
5、小结
5.1、
抽象类用于描述现实世界中的
抽象概念
5.2、
抽象类
只用被继承
不能被创建对象
5.3、
C++是
通过纯虚函数实现
抽象类,(纯虚函数实现过后是虚函数)
5.4、
接口
是一种
特殊的抽象类
,它是只存在纯虚函数的抽象类
5.5、
C++中
没有真正的抽象类
和
接口
的概念