C++的继承与派生

1.作为新手学习C++的继承与派生,首先应该了解C++的继承与派生有何现实意义?

   其现实意义在于可以使程序员无需修改已有类,只需在已有类的基础上,通过增加少量代码或修改少量代码的方法得到新的       类,较好地解决了代码重用问题,减少代码的冗余度。

2.继承与派生的定义是什么?

   继承与派生针对的是类,从已有类产生新类的过程叫派生,新类保留了基类中的某些成员属性叫继承。

3.如何定义一个继承基类某些成员的派生类?

   以下展示一下公有继承的代码

私有继承:class Student:private Person、保护继承:class Student:protected Person (定义时的打法除了这里不一样,其余是相同的)

4.私有继承、公有继承、保护继承有什么相同点与不同点?

     这三种继承方式主要的不同在于派生类对基类成员访问规则的不同

私有继承的访问规则:

  

公有继承的访问规则:

保护继承的访问规则:

虽然这三章表格已经涵盖了这三种继承方式的相同点与不同点,但是对于新手的理解来说是会很混乱的!

首先,我们来理解清楚什么是内部访问,什么是对象访问:

(1)内部访问指的是在定义派生类时在类的内部对基类的成员进行访问

(2)对象访问指的是在已经定义好派生类后,在派生类的外部定义派生类的对象时对基类进行访问

其次,我们把三张表格里的内容转化成文字内容提取出来,加深理解:

(1)私有继承:只可内部访问基类的公有成员和保护成员

(2)公有继承:不只可以内部访问基类的公有成员和保护成员,还可以对象访问基类的公有成员

(3)私有继承:只可内部访问基类的公有成员和保护成员

(4)私有继承和公有继承的区别:(1)公有继承可以对象访问基类的公有成员,而私有继承不可以
                            (2)私有继承得到的派生类的派生类,没有任何方法访问基类的任何成员
                            (3)公有继承得到的派生类的派生类,有机会访问基类的公有成员或保护成员

(5)私有继承和保护继承的区别:(1)私有继承得到的派生类的派生类,没有任何方法访问基类的任何成员
                            (2)保护继承得到的派生类的派生类,有机会访问基类的公有成员或保护成员

(6)公有继承和保护继承的区别:公有继承得到的派生类可以对象访问基类的公有成员,而保护继承不可以

(7)私有继承、公有继承、保护继承三者的共同点:
  
  无论是内部访问还是对象访问,不管哪种访问方式都无法访问基类的私有成员

(8)公有继承的独特点:可以对象访问基类的公有成员

5.派生类的构造函数和析构函数的调用顺序是谁先谁后?


(1)调用构造函数时:先调用基类的构造函数,后调用派生类的构造函数
(2)调用析构函数时:先调用派生类的析构函数,后调用基类的析构函数

6.多重继承的构造函数与析构函数的调用顺序

(1)构造函数的调用顺序:定义派生类时“:”后从左往右的继承顺序依次调用基类的构造函数

(2)析构函数的调用顺序:跟构造函数的调用顺序相反

7.什么是虚基类?

   基类很容易理解就是最原始的类,没有任何基础,自己独立创造的类

   而虚基类在字面上就比较难理解了,也没有明确的文字定义,只能从虚基类的使用场合和作用进行说明:

   如果一个类有多个直接基类,而这些直接基类又有一个共同的基类,则在最低层的派生类中会保留这个简介的共同积累数据成      员的多份同名成员。在派生类中访问这些同名成员时,必须加上“基类名 ::”,使其唯一地标识是哪一个基类的成员,以免产生      二义性。上述其实是虚基类的使用场合,也就是多重继承下,如果想不加"::"就访问这些同名成员,则必须定义虚基类,虚基类    的作用是使派生类中可以访问的同名成员统一,即所有基类同名成员都是同一个成员,不再细分该同名成员属于哪一个类,
   同名成员的值等于最后一次直接基类所定的同名成员的值。

8.多重继承的派生类的构造函数如何定义

 

  9.如果多重继承时,多个直接基类中含有同名成员,可不可以不定义虚基类直接进行多重继承?

    答案是肯定不可以的,首先这么做,VS2017肯定会报错,显示无法访问基类的同名成员。其次,当自己写多重继承下的构造       函数时就会发现很奇怪,不知道如何写构造函数的参数。这时候就会很疑惑,直接写多重继承时所继承的同名成员不可以是直     接继承继承顺序排最后的类的同名成员吗?这时候需要反过来思考,如果这样可以的话,那么这和直接定义一个虚基类有何区     别呢,大家最终都是起到了同名成员归一化的作用--------不再细分同名成员属于哪一个类,以免产生二义性。

10.派生类可否只继承基类的部分成员?

     不可以,必须继承全部成员(基类的构造函数和析构函数除外),当然,继承归继承,继承仅仅代表这个派生类有这个成员,至      于使不使用它就是用户自行定义。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值