C++ 继承

题目

  1. 下面关于继承说法不正确的是( )

A.继承可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展

B.继承体系中子类必须要体现出与基类的不同

C.子类对象一定比基类对象大

D.继承呈现了面相对象程序设计的层次结构,体现了有简单到复杂的认知过程

  • B

B. ✅ 正确 子类是在基类基础上的特化或扩展,应当体现与基类的不同,否则没有必要存在子类。

C. ❌ 不正确

“子类对象一定比基类对象大”这个说法不准确。虽然子类通常会增加自己的属性和方法,但:

子类对象不一定在内存中比基类对象占用更大;

  1. 有的子类可能不添加新成员,只是重写方法;

  2. 对象大小也依赖于具体实现、编译器优化等因素。

  1. 下面说法正确的是( )

A.派生类构造函数初始化列表的位置必须显式调用基类的构造函数,已完成基类部分成员的初始化

B.派生类构造函数先初始化子类成员,再初始化基类成员

C.派生类析构函数不会自动析构基类部分成员

D.子类构造函数的定义有时需要参考基类构造函数

  • D

A. 如果父类有默认构造函数,此时就不需要

  1. 关于基类与派生类对象模型说法正确的是()

A.基类对象中包含了所有基类的成员变量

B.子类对象中不仅包含了所有基类成员变量,也包含了所有子类成员变量

C.子类对象中没有包含基类的私有成员

D.基类的静态成员可以不包含在子类对象中

E.以上说法都不对

  • E

静态成员一定是不被包含在对象中的

  1. 关于基类与子类对象之间赋值说法不正确的是( )

A.基类指针可以直接指向子类对象

B.基类对象可以直接赋值给子类对象

C.子类对象的引用不能引用基类的对象

D.子类对象可以直接赋值给基类对象

  • B

C. 子类对象的引用不能引用基类的对象,因为这会破坏对象模型(缺失子类成员):

Base b;
Derived& dr = b;  // ❌ 错误,类型不匹配
  1. 关于以下菱形继承说法不正确的是( )

A.D总共占了20个字节

B.B中的内容总共在D对象中存储了两份

C.D对象可以直接访问从基类继承的b成员

D.菱形继承存在二义性问题,尽量避免设计菱形继承

class B {public: int b;};
class C1: public B {public: int c1;};
class C2: public B {public: int c2;};
class D : public C1, public C2 {public: int d;};
  • C

A. C1中b和c1共8个字节,C2中c2和b共8个字节,D自身成员d 4个字节,一共20字节

C. 子类对象不能直接访问最顶层基类B中继承下来的b成员,因为在D对象中,b有两份,一份是从C1中继承的,一份是从C2中继承的,直接通过D的对象访问b会存在二义性问题。在访问时候,可以加类名::b,来告诉编译器想要访问C1还是C2中继承下来的b。

学习笔记&练习 文章被收录于专栏

学习过程中的一些记录

全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
迷茫的大四🐶:价格这么低都能满了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务