【笔试题】【day14】

news2024/10/7 16:22:16

目录

第一题(哪些成员变量需要在初始化列表初始化)

第二题(多态的条件)

第三题(多态的条件(通过父类对象调用的全部都是父类的方法))

第四题(菱形继承,虚拟继承的初始化顺序)


第一题(哪些成员变量需要在初始化列表初始化)

有一个类B继承自类A,他们数据成员如下:

class A {
    ...
private:
    int a;
};
class B : public A {
    ...
private:
    int a;
public:
    const int b;
    A &c;
    static const char* d;
    B* e;
}

则构造函数中,成员变量一定要通过初始化列表来初始化的是

A a b c
B b c e
C b c d e
D c e
E b d
F b c

哪些成员必须在初始化列表的位置初始化?

1.const修饰的成员变量(常量数据是不允许修改的,所以只能通过参数列表初始化)

2.引用类型的成员变量(引用不能为空,必须要引用一个对象)

3.类的类型对象,该类没有默认的构造函数。(比方说我们的B类中没有默认构造函数,有一个B(int x)的构造函数,那么我们的另外一个类A去调用我们这个类B的时候,就必须在初始化列表的位置初始化这个B)

A()
    :B(30)
{
 
}

同【笔试题】【day7】_桜キャンドル淵的博客-CSDN博客

中的第四题

但是这里的d也是const的呀,需不需要在参数列表的位置初始化?

静态成员不能再类的内部初始化!

因为静态的成员的初始化必须要放在类的外面,使用类访问限定符指明。

F

第二题(多态的条件)

class Base {
public:
    Base(int j): i(j) {}
    virtual~Base() {}
    void func1() {
        i *= 10;
        func2();
    }
    int getValue() {
        return i;
    }
protected:
    virtual void func2() {
        i++;
    }
protected:
        int i;
};
class Child: public Base {
public:
    Child(int j): Base(j) {}
    void func1() {
        i *= 100;
        func2();
    }
protected:
    void func2() {
        i += 2;
    }
};
int main() {
    Base * pb = new Child(1);
    pb->func1();
    cout << pb->getValue() << endl; delete pb;
}

A 11
B 101
C 12
D 102

这里我们的Base *pd=new Child(1)

会调用子类的Child的构造函数,

 在子类的构造的过程中,其初始化列表中会构造一个Base(j)

 这里的Base(j)又会初始化i为j,所以我们此时的i为1

然后pb->func1()

由于我们的pb是父类的指针,指向的是子类的对象,但是我们的fun1再Base前面并没有加上virtual,所以不构成多态!所以这里还是按照父类的指针就调用父类的方法

 此时我们的i*=10,变成了10,然后调用func2函数

但是我们观察到这个func2函数基类有virtual,并且这是一个父类指针,指向子类,满足多态的条件,所以这里构成多态,也就是调用子类的func2函数,也就是我们下面的这个func2(),所以我们的i+=2变成了12

 

C

第三题(多态的条件(通过父类对象调用的全部都是父类的方法))

#include<iostream>
#include<string>
using namespace std;
class B0 {
public:
    virtual void display() {
        cout << "B0::display0" << endl;
    }
};
class B1 :public B0 {
public:
    void display() { cout << "B1::display0" << endl; }
};
class D1 : public B1 {
public:
    void display() {
        cout << "D1::display0" << endl;
    }
};
void fun(B0 ptr) {
    ptr.display();
}
int main() {
    B0 b0;
    B1 b1;
    D1 d1;
    fun(b0);
    fun(b1);
    fun(d1);
}

A B0::display0 B0::display0 B0::display0
B B0::display0 B0::display0 D1::display0
C B0::display0 B1::display0 D1::display0
D B0::display0 B1::display0 B1::display0

这里我们观察到我们的fun()是一个全局函数

然后我们传入的对象都会被赋值给一个父类对象B0

然后再用这个父类对象去调用display()函数

这里不满足我们多态的条件,只是静态编译,所以我们输出的三个全部都是B0::display0

(对象的调用是静态编译!不是多态)

 

第四题(菱形继承,虚拟继承的初始化顺序)

#include<iostream>
using namespace std;
class A {
public: A(const char* s) { cout << s << endl; } ~A() {}
};
class B : virtual public A {
public: B(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class C : virtual public A {
public: C(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class D : public B, public C {
public: D(const char* s1, const char* s2, const char* s3, const char* s4) :B(s1, s2), C(s1, s3), A(s1)
    { cout << s4 << endl; }
};
int main() { D* p = new D("class A", "class B", "class C", "class D"); delete p; return 0;
}

A class A
class B
class C
class D


B class D
class B
class C
class A


C class D
class C
class B

class A


D class A
class C
class B
class D

我们这里的初始化的顺序是按照这里继承的顺序来的,首先我们继承了B类

 但是我们的B类中又需要有一个A类,A类的构造又需要有一个字符串,所以上面的s1就是我们A类的构造函数中的字符串也就是classA最先被打印出来

然后构造B,打印classB

然后构造C,因为我们的C这里是虚拟继承的,并不会再去构造一个A,而是直接和B共用同一个A。打印classC 

最后打印构造D类,打印classD

A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

猴子也能学会的jQuery第一期——什么是jQuery

#1024程序员节&#xff5c;用代码&#xff0c;改变世界 &#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引入jQuery 未完待续 目录 &#x1f4da;系列文章—目录&#x1f525; &#x1f4c4;需要具备的…

【最佳实践】瀚高数据库 Windows企业版v6.0.4 的安装

Windows7、Windows10 一、安装 解压缩文件“hgdb6.0.4-enterprise-windows10-x86-64-20220127.zip”&#xff0c;以【管理员】身份运行 setup.exe。 安装过程基本上是下一步下一步即可&#xff0c;注意步骤如下。 1.1 安装主目录 注意安装路径&#xff0c;不要包含中文&am…

【创作中心】自定义模板的使用

个人主页&#xff1a;天寒雨落的博客_CSDN博客-初学者入门C语言,数据库,python领域博主 &#x1f4ac; 刷题网站&#xff1a;一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com) 特别标注&#xff1a;该博主将长期更新c语言内容&#xff0c;初学c语言的友友们…

2022年12月1日起,OCS将停止接受GOTS的原料投入

【2022年12月1日起&#xff0c;OCS将停止接受GOTS的原料投入】 GOTS介绍&#xff1b; 全球有机纺织品标准&#xff0c;Global Organic Textile Standard, 简称GOTS。该标准由国际天然纺织品协会&#xff08;IVN&#xff09;、日本有机棉协会&#xff08;JOCA&#xff09;&#…

数字化智慧梁场管理系统解决方案

系统介绍 数字化智慧梁场管理系统实现对预制构件生产的全周期智慧化管理。系统以BIM为基础&#xff0c;搭建完整数字孪生模型&#xff0c;依据生产工序智能排程&#xff1b;围绕生产工序&#xff0c;生产任务智能传递&#xff0c;协同工作&#xff1b;依据生产工序&#xff0c;…

Python实战:获取bing必应壁纸首页的每日一图(仅做学习用)

目录需求网站分析代码实现进一步接口获取其他资源需求 老板&#xff1a;微软必应https://cn.bing.com/ 首页的每日一图看着不错&#xff0c;能不能自动获取 我&#xff1a;我试试 网站分析 我们查看网页元素&#xff0c;不难发现背景图就在类名为.img_cont 的标签下 可是搜…

Vitepress搭建组件库文档(下)—— 组件 Demo

上文 《Vitepress搭建组件库文档&#xff08;上&#xff09;—— 基本配置》已经讨论了 vitepress 搭建组件库文档的基本配置&#xff0c;包括站点 Logo、名称、首页 home 布局、顶部导航、左侧导航等。本文进入最重要的部分 —— 如何像 Element Plus 那样一遍代码就可以展示组…

面试查漏补缺--java基础-容器源码解读

前言&#xff1a; 本文主要是通过源码来解读一些自己还不懂的地方&#xff0c;一些数据结构上的东西&#xff0c;不做过多的解读。 文章目录一、容器体系二、List容器2.1 ArrayList源码2.2 Vector 源码2.3 LinkedList三、Set容器3.1 HashSet一、容器体系 容器总的来说分为两大…

小小博客项目(servlet实战演练)

目录 MVC模式简介 项目概述 &#x1f351;Model&#xff08;模型层&#xff09; &#x1f351;View&#xff08;视图层&#xff09; &#x1f351;Controller&#xff08;控制器层) 项目实战 上面pom.xml代码参考 一、模型层 &#x1f330;User代码&#xff1a;对应数据…

什么是NFS?NFS挂载

文章目录1、NFS服务2、RPC服务与NFS3、NFS的优缺点4、NFS服务端的搭建与配置5、小结1、NFS服务 NFS&#xff0c;全称Network File System&#xff0c;即网络文件系统。最大的功能是通过网络&#xff0c;让不同的机器、不同的操作系统可以共享彼此的文件。 &#x1f609; 更直白…

Go语言开发k8s-05-ConfigMap操作

文章目录1. 结构体1.1 ConfigMapList1.2 ConfigMap1.3 TypeMeta1.4 ObjectMeta1.7 对照yml文件示例1.5 Immutable1.6 Data1.7 BinaryData2. Create configMap语法完整示例3. Get ConfigMapList语法完整示例4. Get ConfigMap语法完整示例5. Update ConfigMap语法完整示例6. Dele…

【网络篇】第二篇——IP协议与MAC地址详解

IP协议 理解源IP地址和目的IP地址 网段划分 IP地址的数量限制 私有IP地址和公网IP地址 路由 NAT(网络地址转换) ​编辑NAT IP转换过程 NAPT MAC地址 理解源MAC地址和目的MAC地址 对比理解MAC地址和IP地址 只有一个MAC地址&#xff0c;可以传输数据嘛? 为什么有了…

网络原理——网络层与数据链路层

JavaEE传送门JavaEE 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理 目录网络层IP 协议IP 地址路由选择数据链路层以太网网络层 网络层做的工作, 就是两点之间, 规划出一个合…

python基于PHP+MySQL的健身房管理系统

随着时代的发展人们人们对身体不健康越来越重视。身体是革命的本钱,所以只有有一个好的身体才能够积极地参加到工作和学习中去。当前社会生活节奏较快人们往往没有时间进行锻炼于是造成了很多富贵病以及办公室职业病的发生。这是一种极其不健康的生活方式,我为了能够让这些亚健…

坚持记账的5大好处,你知道吗?

记账可以理清生活开支&#xff0c;有效节流通过记账&#xff0c;每时每刻都能知道自己的财务状况&#xff0c;花钱的时候会更有目的与计划&#xff0c;不像以前手忙脚乱一团糟&#xff0c;也不再寅吃卯粮&#xff0c;随意透支。对于很多不知道钱花到哪里去的人来说&#xff0c;…

SpringBoot(自定义注解)

目录 1.注解的概念 1.1 什么是注解 1.2 java注解分类 1.3 JDK基本注解 1.4 JDK元注解 2.自定义注解 2.1 自定义注解的组成 2.2 如何自定义注解 2.3 案例 2.3.1 简单了解基本属性 2.3.2 获取类与方法上的注解值 2.3.3 获取类属性上的注解属性值 2.3.4 获取参数修饰注解对应的属…

MQTT X v1.8.3 正式发布

近日&#xff0c;MQTT X 发布了最新的 1.8.3 版本&#xff0c;主要对功能使用进行了优化&#xff0c;并修复了使用过程中所出现的各类问题。例如&#xff0c;优化了 MQTT 5.0 Clean Start 的使用方式&#xff0c;为会话过期间隔添加默认值&#xff1b;优化 MQTT X CLI 的默认输…

数据结构与算法分析之并查集

1. 并查集 并查集是一种树型的数据结构&#xff0c;并查集可以高效的进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1.1 并查集结构 并查集是一种树型结构&#xff0c;但这棵树和我们之前学的二叉树、红黑树、B树等都不一样&#xff…

WindowsServer2016配置故障转移群集图文教程

准备工作 首先准备好两台以上的服务器&#xff0c;并记录好IP和主机名。如下 172.31.210.203 WIN-S8LC9RKL4BB 172.31.215.54 WIN-76A6N72MRTD 之后需要配置到host文件中。 正文 基础配置 首先打开host文件&#xff0c;把所有的IP及主机添加进去。host文件地址如下。 C:\Wi…

10.30-11.3|浙大报考点硕士研究生2023年网上确认系统操作流程

一、登陆《2023年全国硕士研究生招生考试网上确认系统》https://yz.chsi.com.cn/wsqr/stu/index.html。填写考生所在地&#xff0c;点击“确定”。二、点击“开始进行网上确认”。 三、阅读网报公告之后&#xff0c;点击“我已经阅读完毕”。 四、阅读考生诚信考试承诺书&#…