面向对象程序设计——继承与多态的小小疑惑

在这里插入图片描述

前言

11周周三考试,也就短短10天,中间夹杂着各种ddl!冲鸭冲鸭冲鸭!
本章节的重点如下:
在这里插入图片描述

1. 继承了可以进行什么操作?

继承的派生类,除了继承了原来类的成员,还能产生新的成员:

  • 增加新的数据成员或成员函数
  • 重新定义已有成员函数
  • 改变现有成员访问属性

这些让我很惊讶的一点是,继承竟然可以改变现有成员的访问属性!

2. 单继承和多继承各种格式

单继承定义: class 派生类名 : 继承方式 基类名
多重继承定义:class 派生类名 : 继承方式1 基类名1,继承方式2 基类名2

单继承构造函数: 派生类名(总参数表):基类名(参数表){新增成员初始化}
多重继承构造函数:派生类名(总参数表):基类名1(参数表1),基类名2(参数表2),{新增成员初始化}

3. 多种继承方式访问权限

  1. 基类中私有成员不允许在派生类成员函数或被派生类对象访问。
  2. 基类中公有成员被私有继承后,只能被派生类成员函数访问。

4. 多重继承的二义性是个啥?

在以下两种情况会出现二义性:

  • 多个基类中含有同名的成员,在派生类中访问该成员则冲突→使用限定名访问同名成员
  • 多个基类有一个共同的祖先基类,在派生类中访问该祖先基类的成员时则冲突→将祖先类设置为虚基类

限定名实现:B1::a; B2::a;

B1::a;
B2::a;

虚基类实现

class A{
}

class B1:virtual public A{
}

class B2:virtual public A{
}

class C:public B1,public B2{
}

5. 派生类和基类的爱恨情仇

  • 公有继承的情况下,一个派生类对象可以作为基类对象使用。
    为啥呢???你想啊,既然派生类是共有继承基类来的,那么基类的所有成员,派生类的对象都有。因此派生类的对象,可以当作基类对象使用。

6. 动态联编和虚函数、多态的关系

要分析三者的关系,首先得明确一下三者的定义:

动态联编:在运行时确定函数调用所使用的函数体
多态:同样的对象被类的不同对象接收时导致完全不同的行为

多态是动态联编的一种实现,动态多态是采用动态联编,通过虚函数实现的。

练习题总结

1.派生类继承基类时,如果省略继承方式,则默认为( c )继承。
A. 公有 B. 保护 C. 私有

这个真的不记得,但应该和类中成员定义一样,未声明均定义为私有。

2.在如下继承层次下,当实例化有派生类对象时,调用构造函数的顺序为( )。
class Base{…};
class Base1: virtual Base{…};
class Base2: virtual Base{…};
class Derived : public Base2, public Base1{…};
A. Base(), Base1(), Base(), Base2(), Drived()
B. Base(), Base2(), Base(), Base1(), Drived()
C. Base(), Base1(), Base2(), Drived()
D. Base(), Base2(), Base1(), Drived()

D,由于对于祖先类的继承方式为虚继承,因此在调用构造函数的时候只需要一次,若不是虚继承,则此题就需要选B啦~

3.如有基类Base和派生类Derived,实例化对象Base b; Derived d;叙述正确的是( )。
A. Derived* pDev = new Base();
B. Derived类中不能定义与Base类同名的成员,以免引用时引起歧义;
C. Base* pb =&d ; Derived* pd = &b 为正确的赋值操作;
D. Base& rb = d; Base bb = d; 为正确的赋值操作;

这题选D,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值