C++进阶剖析(二十二)之抽象类和接口

1.1抽象类
1.1.1案例引出
现实生活中有很多的类,比如图形这个类,图形又包括矩形和三角形等。在进行面向对象分析的时候,会发现一些抽象的概念,比如图形类的面积怎么计算。
现实中需要知道具体的图形(Shape)类型才能求面积,所以对概念上的图形求面积是没有意义的。

1.1.2 那么Shape类还有存在的意义吗?
面向对象是对现实世界的一种描述,如果这个Shape类不存在,对现实世界的描述就是不完整的,所以有必要存在。

1.1.3面向对象中的抽象类

  • 可用于表示现实世界中的抽象概念
  • 是一种只能定义类型,不能产生对象的类
  • 只能被继承并重写相关函数
  • 直接特征就是相关函数并没有完整的实现

1.1.4

  • 程序中必须能反映抽象的图形
  • 程序通过抽象类表示图形的概念
  • 抽象类不能创建对象,只能用来继承

1.1.5

  • 一个C++类中存在纯虚函数就成为了抽象类
  • 纯虚函数指定义原型的成员函数
  • C++中通过纯虚函数实现抽象类

1.2
1.2.1

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

1.2.2

#include <iostream>
using namespace std;

class A
{
protected:
	int mi;
	int mj;
public:
	A(int i =0,int j =0)
	{
		mi =i;
		mj =j;
	}
	virtual int area() =0;

};

class B :public A
{
public:
	B( int i ,int j)
	{
		mi =i;
		mj =j;
	}
	virtual int area()
	{
		return mi*mj;
	}

};
class C :public A
{

public:
	C( int i ,int j)
	{
		mi =i;
		mj =j;
	}
	virtual int area()
	{
		return mi *mj / 2;
	}
};
void calc(A* p)
{
	int d =p->area();
	cout<<"d="<<d<<endl;
}
int main()
{ 
//	A a;  //error
	B b(10,2);
	C c(10,2);
	calc(&b);
	calc(&c);
	
	return 0;
}

1.2.3 抽象类总结

  • 抽象类是通过纯虚函数进行表示的。 纯虚函数表示方法:virtual int area() =0;
  • 只要这个类中存在纯虚函数,这个函数就是纯虚类
  • 抽象类中除了纯虚函数还可以有其他的普通函数,或者虚函数,还可以有成员变量,和普通的类唯一不同的就是纯虚函数不能生成对象。

1.3接口
满足下面条件的C++类称为接口

  • 类中没有定义任何的成员变量
  • 所有的成员函数都是公有的
  • 所有的成员函数都是纯虚函数
  • 接口是一种特殊的抽象类

参考一 :狄泰软件学院C++进阶剖析
参考二 : C++ primer中文版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值