C++ 学习轨迹之面向接口和抽象类

一.面向接口的含义
1.所谓接口就是指一系列的函数的集合,这些函数提供了一系列功能,然后通过继承的方式分配给需要的类对象,而这些类对象拥有这些功能。
2.面向对象即将数据和算法即数据处理方法封装在一起,所有对象的都是通过类来描述,但是不是所有类都具有描述对象的功能,比如抽象类。
3.在接口中,所有方法都是抽象的,接口是抽象的变体。
4.一个好的接口应该是具有专一功能的,而不是具有多功能的,否则就会造成接口污染。

二.面向接口的实现
1.java 中有interface关键字实现接口,而C++ 只能通过虚函数或者纯虚函数的方式来实现接口,然后子类继承这个接口类并定义虚函数的功能即可
2.最好不要带有成员变量(除了静态常量),否则相当于暴漏了细节,而接口是不关心细节的
3.要有纯虚函数-----接口方法
4.要有虚析构函数,但是不能有构造函数。
5.接口类无法实例化,即接口类不提供方法的定义,仅提供方法的接口。而方法的定义是在接口类的子类中实现,从而,接口类变成了抽象类。
6.如果接口类的析构函数不是虚析构函数的话,将只会调用接口类的析构函数,接口类的子类的析构函数将不会被调用,内存泄露将会产生,所以接口类的析构函数必须定义成虚析构函数。
7.C++中用抽象类的形式来实现接口。
8.接口类的出现是为了解决抽象类不能多重继承的问题。
9.接口更像是一种行为规范(规定了方法名、形参表、返回类型)

三.抽象类
1.用abstract修饰的类就是抽象类,C++中含有纯虚函数的类称作抽象类,它是不完整的,只能作为基类,并不能生成对象。
2.它的作用是作为全局变量和进行类型隐藏,就是作为基类用来继承的,免去编写重复代码,用纯虚函数定义公共方法,比如shape,用纯虚函数定义area,然后派生类的对象以多态的形式(子类重写,完成不同的业务逻辑)实现三角形和圆形的面积的计算,抽象类也是一个类,派生类公用抽象类的私有成员,但其成员函数为纯虚函数。为什么要这样呢?因为继承抽象类的纯虚函数可以调用抽象类的私有成员———抽象类的实现。
3.它是对很多表面看上去不同,但是本质是一样的具体事务的概念的抽象,比如三角形和圆形,它们都属于形状这一概念,但形状这个类无法实例化即无法生成对象。
4.C++没有abstract关键字修饰,而可以通过纯虚函数来实现。
5.在实现接口时,常写一个抽象类,来实现子类通用的方法,在编写子类时可以通过继承抽象类。
6.抽象类可以包含抽象访问器和抽象方法(通用方法)。
7.为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类。
8.抽象类可以派生另一个抽象类,且抽象类既可以定义抽象方法,也可以定义普通方法。
9.虽然抽象类不能实例化,但是可以使用抽象类指针指向不同的子类的实例。
10.抽象类的标志是类里面包含一个或多个纯虚函数。
11.为什么要设计抽象类呢?
为了实现多态,(多态的三个条件是继承,子类重写父类方法,父类引用指向子类对象。)
12.纯虚函数就是为了声明我这个是抽象方法而不是具体方法。

四.抽象类和接口类的区别
1.前者抽象方法即功能,后者抽象整体。
2.一个类只能继承一个类(基类),但可以有多个接口,比如人类继承生物类,但可以继承多个接口类,比如跑,吃饭等等。
3.接口类中只声明方法但不定义方法即只有抽象方法,而抽象类既可以定义抽象方法也可以定义普通方法,所以前者的子类必须重写并实现方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值