抽象类和接口

面向对象中的抽象类

  • 用于现实世界的抽象概念
  • 只能是定义类型,不能产生对象的类
  • 只能被继承并重写相关函数(没有必要创建对象)
  • 直接特征是相关函数没有完整的实现

抽象类与纯虚函数

  • C++语言没有抽象的概念
  • C++通过纯虚函数实现抽象类
  • C++虚函数只定义原型的成员函数
  • 一个C++类中存在纯虚函数就是味蕾抽象类

纯虚函数语法规则

class Shape
{
public:
virtuial double area() = 0;
};

#include <iostream>
#include <string>

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 r = p->area();
	cout << "r = " << r << endl;
}

int main()
{
	Rect rect(1, 2);
	Circle circle(10);
	
	area(&rect);
	area(&circle);
	
    return 0;
}

结论

  • 抽象类只能作为父类被继承
  • 子类必须实现纯虚函数的具体功能
  • 纯虚函数被实现后成为虚函数
  • 如果没有实现纯虚函数,则子类成为抽象类

特殊的抽象类–接口

  • 类中没有定义任何成员变量
  • 所有成员函数都是共有的
  • 所有的成员函数都是纯虚函数
  • 接口是一种特殊的抽象类
#include <iostream>
#include <string>

using namespace std;

class Channel//接口
{
public:
	virtual bool open() = 0;
	virtual bool close() = 0;
	virtual bool send(char* buf, int len) = 0;
	virtual bool receive(char* buf, int len) = 0;
};


int main()
{
	
    return 0;
}

小结

  • 抽象类(描述抽象事物)只能被继承不能创建对象
  • 接口是一种特殊的抽象类
  • C++通过纯虚函数实现抽象类
  • 类中只存在纯虚函数时成为接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值