【C++笔试强训】第十三天

news2024/12/24 2:32:01

🎇C++笔试强训


  • 博客主页:一起去看日落吗
  • 分享博主的C++刷题日常,大家一起学习
  • 博主的能力有限,出现错误希望大家不吝赐教
  • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

在这里插入图片描述

💦🔥


选择题

💦第一题

下面叙述不正确的是()

A 派生类一般都用公有派生
B 对基类成员的访问必须是无二义性的
C 赋值兼容规则也适用于多重继承的组合
D 父类的公有成员在派生类中仍然是公有的

A 大部分都是公有派生,私有和保护也可以

B 如果出现二义性则会编译不通过

C 赋值兼容规则指的是,1.把子类对象直接赋值给父类,2. 把子类对象的地址赋给父
类的指针,3.可以把子类对象的引用对父类初始化,也适用于多重继承的组合

D 如果在继承的过程当中如果继承方式变私有则不行

这道题的答案是D


💦第二题

下面 C++ 程序的运行结果是()

#include <iostream>
using namespace std;
class parent {
	int i;
protected:
	int x;
public:
	parent() { x = 0; i = 0; }
	void change() { x++; i++; }
	void display();
};
class son :public parent {
public:
	void modify();
};
void parent::display() {
	cout << "x=" << x << endl;
}
void son::modify() {
	x++;
}
int main() {
	son A;
	parent B;
	A.display();
	A.change();
	A.modify();
	A.display();
	B.change();
	B.display();
	return 0;
}

A x=1
x=0
x=2

B x=2
x=0
x=1

C x=0
x=2
x=1

D x=0
x=1
x=2

A.display() // 打印x的值,构造函数初始化x=0;
A.change()// 调动完之后x,i都为1
A.modify()//调动之后++为2
A.display()//打印x的值为2
//B是一个新的空间
B.change();//初始化只后++变1
B.display()//x的值为1

这道题的答案是C


💦第三题

关于虚函数的描述正确的是()

A 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B 内联函数不能是虚函数
C 派生类必须重新定义基类的虚函数
D 虚函数可以是一个static型的函数

A 如果两个虚函数没有什么联系则不同,如果派生类的虚函数重写父类的虚函数,则需要具有相同的参数类型和参数个数
B 内联函数不能声明成虚函数,在真正寻址的时候内联函数会被展开的,最后不会存在
C 派生类不一定需要重新定义基类的虚函数
D 静态函数没有this指针,虚函数需要靠this指针调用

这道题的答案是B


💦第四题

当一个类对象的生命周期结束后,关于调用析构函数的描述正确的是()

A 如果派生类没有定义析构函数,则只调用基类的析构函数
B 如果基类没有定义析构函数,则只调用派生类的析构函数
C 先调用派生类的析构函数,后调用基类的析构函数
D 先调用基类的析构函数,后调用派生类的析构函数

子类对象如果继承了父类,则会先构造父类再构造子类,而析构则是相反的

先调用派生类的析构函数,后调用基类的析构函数,跟是否定义没有关系

这道题的答案是C


💦第五题

以下关于纯虚函数的说法,正确的是()

A 声明纯虚函数的类不能实例化
B 声明纯虚函数的类成虚基类
C 子类必须实现基类的
D 纯虚函数必须是空函数

纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

A 纯虚函数不可以实例化
B 虚基类和抽象类是两个概念,纯虚函数是抽象类,虚基类是菱形继承
请添加图片描述这样最后D里面会有两个_a,代码会冗余,则需要BC虚拟继承A,A这就是虚基类

C 如果不想实现多态可以不实现

D 纯虚函数不一定只能是空函数,也可以是有实现的函数

这道题的答案是A


💦第六题

下列描述,正确的一共有多少个()

1)const char *p,这是一个常量指针,p的值不可修改
2)64位机上,char *p= “abcdefghijk”; sizeof(p)大小为12
3)inline会检查函数参数,所以调用开销显著大于宏
4)重载是编译时确定的,虚函数是运行时绑定的

A 1
B 2
C 3
D 4

const char *p,这是一个常量,p可修改,p所指的值不可以修改

在64位机上,指针是8个字节

内联函数和宏都会展开,开销差不多

虚函数式动态编译,只有4正确

这道题的答案是A


💦第七题

C++将父类的析构函数定义为虚函数,下列正确的是哪个()

A 释放父类指针时能正确释放子类对象
B 释放子类指针时能正确释放父类对象
C 这样做是错误的
D 以上全错

这道题需要知道C++将父类的析构函数定义为虚函数有什么用??

析构函数定义为虚函数时:基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。

这道题的答案是A


💦第八题

下列关于多态性说法不正确的是( )

A 多态性是指同名函数对应多种不同的实现
B 重载方式仅有函数重载
C 重载方式包含函数重载和运算符重载
D 多态性表现为静态和动态两种方式

A 多态性是指同名函数对应多种不同的实现,多种形态,用相同代码实现不同作用

B 还有运算符重载

C 重载方式包含函数重载和运算符重载

D 多态性表现为静态和动态两种方式,可以动态实现

这道题的答案是B


💦第九题

分析一下这段程序的输出

#include<iostream>
using namespace std;
class B
{
public:
	B()
	{
		cout << "default constructor" << " ";
	}
	~B()
	{
		cout << "destructed" << " ";
	}
	B(int i): data(i)
	{
		cout << "constructed by parameter" << data << " ";
	}
private: int data;
};
B Play( B b)
{
	return b;
}
int main(int argc, char *argv[])
{
	B temp = Play(5);
	return 0;
}

A constructed by parameter5 destructed destructed

B constructed by parameter5 destructed

C default constructor" constructed by parameter5 destructed

D default constructor" constructed by parameter5 destructed destructed

Play(5); 这是个临时无名对象
调用 的是:

B(int i) : data(i)
{
cout<< “constructed by parameter” << data <<endl;
}

然后调用默认operator=(没有,编译器自动生成一个),将临时无名对象拷贝到temp,拷贝完,要析构。所以其实构造了两个对象,函数结束要析构temp,所以调用两次析构函数。

这道题的答案是A


💦第十题

求输出结果

求输出结果
#include <iostream>
using namespace std;
class A
{
public:
virtual void print()
{
	cout << "A::print()" << "\n";
}
};
class B: public A
{
public: virtual void print()
{
	cout << "B::print()" << "\n";
}
};
class C: public A
{
public: virtual void print()
{
	cout << "C::print()" << "\n";
}
};
void print(A a)
{
	a.print();
}
int main()
{
	A a, *aa, *ab, *ac;
	B b;
	C c;
	aa = &a;
	ab = &b;
	ac = &c;
	a.print();
	b.print();
	c.print();
	aa->print();
	ab->print();
	ac->print();
	print(a);
	print(b);
	print(c);
}

A C::print() B::print() A::print() A::print() B::print() C::print() A::print() A::print() A::print()

B A::print() B::print() C::print() A::print() B::print() C::print() A::print() A::print() A::print()

C A::print() B::print() C::print() A::print() B::print() C::print() B::print() B::print() B::print()

D C::print() B::print() A::print() A::print() B::print() C::print() C::print() C::print() C::print()

A 虚函数打印,B 继承A,重写虚函数打印,C 继承A,重写虚函数

abc.printf 是静态绑定,直接访问,打印ABC

aa,ab,ac-> 是多态,调用的是子类对象,所以也是打印ABC

printf(abc)可以接受父类,通过父类调用父类对象,拥有是父类,无法调用子类,所以打印AAA

这道题的答案是B


编程题

🔥第一题

链接:参数解析

请添加图片描述- 解题思路

本题通过以空格和双引号为间隔,统计参数个数。对于双引号,通过添加flag,保证双引号中的空格被输出。

  • 代码演示
#include <iostream>
#include <string>
#include <vector>
using namespace std;

void cmdLineParse(const string &str)
{
    string tmp = "";
    vector<string> svec;
    bool flag = false; //判断是否处于字符串状态

    for(int i = 0;i < str.size();++i)
    {
        if(str[i] == '"')//判断是否是字符串的起始或结束
        {
            flag = !flag;//说明处于字符串状态
        }
        else if(str[i] == ' ' && !flag)//判断参数的分隔或者是否为字符串内容
        {
            svec.push_back(tmp);
            tmp = "";
        }
        else//正常的参数内容
        {
            tmp += str[i];
        }
    }
    svec.push_back(tmp);//最后可能没有空格,需要追加

    cout << svec.size() << endl;
    for(int i = 0;i < svec.size();++i)
    {
        cout << svec[i] << endl;
    }
}

int main()
{
    string str;
    while(getline(cin,str))
    {
        cmdLineParse(str);
    }
    return 0;
}

🔥第二题

链接:跳石板

请添加图片描述

  • 题目解析

题目的意思是从N开始,最少需要累加几步可以变成指定的数字M,每次累加的值为当前值的一个约数。

  • 解题思路

将1 - M个石板看做一个结果数组stepNum,每个stepNum[i]储存着从起点到这一步最小的步数,其中0为不能到达。 从起点开始对stepNum进行遍历,先求i的所有约数(即从stepNum[i]能走的步数),然后更新那几个能到达的位置的最小步数。如果不能到达则更新为此时位置的最小步数 + 1,如果是能到达的就更新为min(已记录的最小步数,此处的最小步数 + 1)),遍历一遍后得到结果。

  • 代码演示
#include <iostream>
#include <vector>
#include <limits.h>
#include <cmath>
using namespace std;

void get_div_num(int v,vector<int> &a)
{
    for(int i = 2;i <= sqrt(v);++i)
    {
        if(v%i==0)
        {
            a.push_back(i);
            if(v/i != i)
                a.push_back(v/i);
        }
    }
}

int Jump(int n,int m)
{
    vector<int> step(m+1,INT_MAX);//INT_MAX表示不可达到
    step[n] = 0;//当前位置初始化

    for(int i = n;i < m;++i)
    {
        if(step[i] == INT_MAX)
            continue;
        vector<int> a;
        //获取i的约数并保存
        get_div_num(i,a);

        for(int j = 0;j < a.size();++j)
        {
            if(a[j]+i <= m && step[a[j]+i] != INT_MAX)//需要挑选一个最小值
            {
                //需要挑选一个最小值
                step[a[j]+i] = min(step[a[j]+i],step[i]+1);
            }
            else if(a[j]+i <= m)
            {
                step[a[j]+i] = step[i]+1;
            }
        }
    }
    return step[m] == INT_MAX?-1:step[m];
}

int main()
{
    int n,m,min_step;
    while(cin >> n >> m)
    {
        min_step = Jump(n,m);
        cout << min_step << endl;
    }
    return 0;
}

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

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

相关文章

YOLOv5、v7改进之三十八:引入RepVGG模型结构

前 言&#xff1a;作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv7的如何改进进行详…

基于javaweb的养老院管理系统(java+springboot+thymeleaf+html+js+mysql)

基于javaweb的养老院管理系统(javaspringbootthymeleafhtmljsmysql) 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计&#xff0c;大作业&#xff0c;毕业设计&#xff0c;项目练习&#xff0c;学习演示等 功能说明 基于…

synchronized到底锁的是谁、何时生效

一、synchronized锁的几种形式 synchronized修饰普通方法synchronized修饰静态方法synchronized修饰代码块 1、synchronized修饰普通方法 简单示例 public class Test{private String age;private String name;public synchronized void print(String arg1, String arg2) {…

零代码,让业务人员实现应用创造自由

摘要&#xff1a;以汽车营销场景为例&#xff0c;从AppCube零代码和业务大屏入手&#xff0c;帮助开发者更好地理解AppCube低代码和零代码异同点&#xff0c;在实际使用时能更快选取更合适的工具能力&#xff0c;实现应用构建效率最大化。本文分享自华为云社区《DTT第8期直播回…

超级详细的Vue安装与配置教程

Vue web前端三大主流框架之一,是一套用于构建用户界面的渐进式框架,下面这篇文章主要给大家介绍了关于Vue安装与配置教程的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下 − 目录 一、下载和安装Vue二、创建全局安装目录和缓存日志目录三、配置环境变量 1. 环境…

【k哥爬虫普法】简历大数据公司被查封,个人隐私是红线!

我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#xff0c;K 哥特设了“K哥爬虫普法”专栏&#xff0c;本栏目通过对真实案例的分析&#xff0c;旨在提高广大爬虫工程师的法律意识&#xff0c;知晓如何合法合规利用…

mysql忘记密码怎么办(附免密登录和修改密码)

前言 博主个人社区&#xff1a;开发与算法学习社区 博主个人主页&#xff1a;Killing Vibe的博客 欢迎大家加入&#xff0c;一起交流学习~~ 一、打开MySQL&#xff08;能打开请跳过此步&#xff09; 第一种&#xff1a;安装完MySQL之后&#xff0c;MySQL提供大家的客户端程序 …

DASCTF X GFCTF 2022十月挑战赛-hade_waibo

这是一个非预期解&#xff0c;但是得到出题人的赞许&#xff0c;莫名开心&#xff0c;哈哈&#xff1a; cancan need处存在任意文件读取 <!DOCTYPE html> <html lang"en" class"no-js"> <head> <meta charset"UTF-8" />…

引爆记忆广告语盘点

在数字化、流量红利见顶、营销环境巨变的进程中&#xff0c;品牌传播的节奏从快到稳。品牌出圈更需要产品、渠道、内容、文化等方面的共振影响&#xff0c;其中广告语作为品牌定位和价值主张的核心载体&#xff0c;是连接消费者心智的重要品牌资产。 根据益普索Ipsos《引爆记忆…

uni-app、小程序项目分包经验之谈与天坑异常:RangeError: Maximum call stack size exceeded

小程序分包经验之谈与天坑异常&#xff1a;RangeError: Maximum call stack size exceeded小程序分包概述分包配置参数&#xff1a;subPackages分包预载配置参数&#xff1a;preloadRule如何使用实际小程序项目分包项目结构配置分包配置分包预载天坑异常场景分析猜想尝试解决解…

springboot配置多个数据源

一.多数据源的典型使用场景 在实际开发中,经常可能遇到在一个应用中可能要访问多个数据库多的情况,以下是两种典型场景 1.业务复杂 数据分布在不同的数据库中,数据库拆了,应用没拆.一个公司多个子项目,各用各的数据库,设计数据共享 2.读写分离 为了解决数据库的性能瓶颈(读…

C++内存管理和模板

目录 内存管理 new T[N] new和delete关键字的总结&#xff1a; 定位new表达式(placement-new)&#xff1a; 作用&#xff1a; 使用格式&#xff1a; 使用场景&#xff1a; 实例&#xff1a; 调用析构函数的两个方法&#xff1a; 池化技术&#xff1a; 面试题&#xff1…

Unity 分享 功能 用Unity Native Share Plugin 实现链接、图片、视频等文件的分享+ 安卓 Ios 都可以,代码图文详解

Unity 分享 功能 用Unity Native Share Plugin 实现链接、图片、视频等文件的分享 安卓 Ios 都可以&#xff0c;代码图文详解前言环境效果一、Unity Native Share Plugin导入1.下载2.导入二、案例1.分享文字1.脚本2.发包注意2.分享视频1.完善下刚才的脚本2.给复制按钮添加点击事…

【Linux】Linux环境搭建

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;Linux的介…

【QT 自研上位机 与 STM32F103下位机联调>>>通信测试-基础样例-联合文章】

【QT 自研上位机 与 STM32F103下位机联调>>>通信测试-基础样例-联合文章】1、概述2、实验环境3、联合文章&#xff08;1&#xff09;对于上位机&#xff0c;可以参照如下例子&#xff08;2&#xff09;对于下位机&#xff0c;可以参照如下例子4、QT上位机部分第一步&a…

python中os库的使用

目录介绍1 listdir(path: str)2 path.isdir(path: str)3 path.isfile(path: str)4 path.join(path: str, file: str)5 path.getsize(path: str)介绍 本博客记录python中os库的一些函数使用。 1 listdir(path: str) listdir()函数输入一个目录&#xff0c;返回该目录下的所有…

web前端 html+css+javascript游戏网页设计实例 (网页制作课作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

数字化浪潮下,低代码能否加速企业的数字化转型

随着加快建设数字中国的目标明确下来&#xff0c;市场上与数字化相关的企业都得到了极大鼓舞&#xff0c;这不仅意味着后续数字领域的加速发展&#xff0c;更是代表着数字化已经完全可以向各行各业拓展&#xff0c;大力推进数字化建设。数字中国也说明了数字化并不能只是限制在…

FastTunnel Win10内网穿透实现远程桌面

目录 一、需求 二、购买公网服务器 三、远程公网服务器 四、FastTunnel 的使用 1.下载 FastTunnel 2.启动服务器端 3.启动客户端 五、测试 六、安装服务 结束 一、需求 FastTunnel 简介 高性能跨平台内网穿透工具&#xff0c;使用它可以实现将内网服务暴露到公网供…

【数据结构与算法】时间复杂度和空间复杂度

✨ 个人主页&#xff1a;bit me ✨ 当前专栏&#xff1a;数据结构 &#x1f31f;每日一语&#xff1a;窗外有风景 笔下有前途 低头是题海 抬头是鹏程 时间复杂度和空间复杂度的认知&#x1f30e; 一. 如何衡量一个算法的好坏&#x1f319; 二. 算法效率&#x1fa90; 三. 时间…