20170327_请说出C++中继承的概念

20170327_请说出C++中继承的概念

1、继承的概念?

(1)面向对象的三大技术分别是封装、继承和多态。可见,继承在面向对象的程序设计中地位很重要。

(2)继承,指的是基类派生出派生类,派生类从基类那儿继承了已有的一些代码模块,包括数据和函数,可以为自己所使用或者重新定义以实现新的功能。

(3)继承的主要目的就是为了实现代码重用,增加代码的复用性。

2、派生类与基类的转换?

(1)派生类的对象中,既包含了从基类继承过来的基类部分,也包含了派生类自己新增加的派生类部分。

(2)因此,可以使用派生类对象初始化基类对象、也可以使用派生类对象给基类对象赋值。初始化时调用的是构造函数,赋值时调用的是赋值运算符。另外,可以使用基类指针或者基类引用指向派生类对象,它们指向的都是派生类中的基类部分,这就是上行转换。

(3)但是,没有从基类型自动转换为派生类型的隐式转换,因为基类对象中没有派生类新增加的成员。另外,可以使用C++中的显示强制类型转换符 static_cast 和 dynamic_cast 使得基类指针或基类引用强制转换为派生类指针或派生类引用,这就是下行转换。

3、有哪几种继承方式?继承时访问级别如何确定?

(1)继承的方式有三种,public 公有继承、protected 保护继承、private 私有继承。

访问级别又分为内部访问和外部访问。内部访问指的是派生类的成员函数对于基类的访问,外部访问指的是派生类的对象对于基类的访问。

(2)公有继承时,基类的私有成员在派生类中不可见。基类的公有成员和保护成员在派生类中保持属性不变,它们均可以进行内部访问,但是只有基类的公有成员才可以进行外部访问。

(3)保护继承时,基类的私有成员在派生类也不可见。基类的公有成员和保护成员在派生类中的属性均变为保护属性,它们均可以进行内部访问,但是均不能进行外部访问。

(4)私有继承时,基类的私有成员在派生类也不可见基类的公有成员和保护成员在派生类中的属性均变为私有属性,它们均可以进行内部访问,但是均不能进行外部访问。

4、什么时候发生函数覆盖?

(1)覆盖,指的是在派生类继承基类的前提下,派生类中的某个函数和基类中的某个函数,具有相同的函数名、相同的形参列表以及相同的函数返回值,只是该函数的功能实现(函数体)可以根据具体需要而有所不同。其中,最重要的是基类中的这个函数必须得是虚函数!同时,在使用派生类对象调用该同名函数时,调用的是派生类中的同名函数,而不是基类中的同名函数。

(2)总结起来就是,基类与派生类之间——基类中的虚函数——这两个函数的函数名、形参列表以及函数返回值均要相同。

(3)这与函数的重载和隐藏都是不一样的。

6、为什么需要多重继承?它的优缺点是什么?

(1)在实际应用中,可能一个派生类需要同时继承两个及两个以上基类的接口——数据与函数,这时候就需要使用多重继承。

(2)优点就是,派生类对象可以调用多个不同的基类接口

(3)缺点就是,菱形继承的情况下,很容易出现接口的二义性问题

7、多重继承中的二义性问题该如何解决?

(1)应该说有两个方法可以解决---不同基类中相同接口的二义性问题。

(2)一个就是,在调用基类接口的时候,使用作用域运算符::加以限制,明确指出调用的是哪一个基类的接口。

另一个就是,使用虚拟继承的方法,使被继承的基类全部成为虚基类,这样,在派生类中就只会出现不同基类中相同接口的一份拷贝,而不是多份拷贝。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值