【C++】笔试训练(八)

目录

  • 一、选择题
  • 二、编程题
    • 1、两种排序方法
    • 2、求最小公倍数

一、选择题

1、关于重载函数,哪个说明是正确的()
A 函数名相同,参数类型或个数不同
B 函数名相同,返回值类型不同
C 函数名相同,函数内部实现不同
D 函数名称不同

答案:A
解析:函数重载:在相同作用中,函数名字相同,参数列表不同的一系列函数称为函数重载
参数列表不同具体的体现:参数个数不同,参数类型不同,类型的次序不同
注意:与函数返回值类型是否相同没有关系

2、关于引用以下说法错误的是()
A 引用必须初始化,指针不必
B 引用初始化以后不能被改变,指针可以改变所指的对象
C 不存在指向空值的引用,但是存在指向空值的指针
D 一个引用可以看作是某个变量的一个“别名”
E 引用传值,指针传地址
F 函数参数可以声明为引用或指针类型

答案:E
解析:E,引用底层是使用指针来实现的,引用本质就是一个指针

3、类定义的外部,一定可以被访问的成员有( )
A 所有类成员
B private或protected的类成员
C public的类成员
D public或private的类成员

答案:C

4、请将下列构造函数补充完整,使得程序的运行结果是5

#include<iostream>
using namespace std;
class Sample 
{
public:Sample(int x) {________}~Sample() {if (p) delete p;} int show() {return *p;} 
private :int* p;
};
int main() 
{Sample S(5);cout << S.show() << endl;return 0;
}

A *p=x;
B p=new int(x);
C *p=new int(x);
D p=&x;

答案:B

5、下列情况中,不会调用拷贝构造函数的是()
A 用一个对象去初始化同一个类的另一个新对象时
B 将类的一个对象赋值给该类的另一个对象时
C 函数的形参对象,调用函数进行形参和实参结合时
D 函数的返回值是类的对象,函数执行返回调用时

答案:B
解析:拷贝构造概念:是一个特殊的构造函数,是单参的,参数的类型必须是类类型&,一般情况下,会使用const来进行修饰
A(const A& a)
调用时机:当用已经存在的对象构造新对象时,编译器会自动调用拷贝构造函数
A :A a1; A a2(a1);//拷贝构造函数
B :a1 = a2; // 此处调用的是赋值运算符的重载
C :void Fun(A a) {} // 传参时也会调用拷贝构造函数
D :A Fun() { A a; return a; }

6、以下代码共调用多少次拷贝构造函数:

Widget f(Widget u)
{Widget v(u);Widget w = v;return w;
} 
main() 
{Widget x;Widget y = f(f(x));
}

A 1
B 3
C 5
D 7

答案:D
解析:y对象的构造将来也需要调用构造函数,先传内部的f(x)
注意:当函数返回值是类类型对象时,编译器可能会对返回值类型进行优化
在这里插入图片描述

7、如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是()
A 一元运算符
B 二元运算符
C 选项A)和选项B)都可能
D 重载错误

答案:D
解析:当用户定义了一个类之后,然后想要通过该类的对象自己使用某种运算符----编译器不支持
原因:类对象中可能有多个成员,在用该类的对应进行相应的运算符操作时,该如何处理,编译器是不知道的
比如:Date
d1 - d2 d1 < d2
运算符重载:
1、重载成类的成员函数----形参数目看起来比该运算符需要的参数个数少1----因为成员函数有隐藏的this
2、重载成类的友元函数----必须有一个参数要是类类型的对象

8、在main 函数中,变量 a 和 b 的构造函数和析构函数的调用顺序是()

class A;
class B;
int main() 
{A a;B b;return 0;
}

A b构造 - a构造 - a析构 - b析构
B a构造 - a析构 - b构造 - b析构
C b构造 - a构造 - b析构 - a析构
D a构造 - b构造 - b析构 - a析构

答案:D

9、下面 C++ 程序的运行结果为()

#include <iostream>
using namespace std;
class cla {static int n;
public:cla() { n++; }~cla() { n--; }static int get_n() { return n; }
};
int cla::n = 0;
int main() {cla* p = new cla;delete p;cout << "n=" << cla::get_n() << endl;return 0;
}

A n=3
B n=4
C n=1
D n=0

答案:D

10、运行的程序总要与内存进行交互。内存作为操作系统中的重要资源,对内存的分配和释放进行管理是一项非常重要的工作,以下说法中错误的是 ______。
A 内存泄露是内存管理中的常见问题
B 悬挂引用指的是对某个对象的应用实际上指向一个错误的内存地址
C 在C、C++等系统语言中,有自动的内存管理机制,不需要考虑内存管理的问题
D 程序的动态性越强,内存管理就越重要,内存分配程序的选择也就更重要

答案:C

二、编程题

1、两种排序方法

入口:题目链接

题目描述
在这里插入图片描述

解题思路
将接受的字符串都放到vector容器中,利用string的operator>=运算符重载来按ascii比较字符串,利用string的size来比较字符串的长度

代码展示

#include <iostream>
#include <string>
#include <tuple>
#include <vector>
using namespace std;int main() {vector<string> v;int n;cin >> n;v.resize(n);for (auto& str : v){cin >> str;}bool lsort = true;bool csort = true;for (int i = 1; i < n; i++){if (v[i - 1].size() > v[i].size()){lsort = false;break;}}for (int i = 1; i < n; i++){if (v[i - 1] > v[i]){csort = false;break;}}if (lsort && csort){cout << "both" << endl;}else if (!lsort && !csort){cout << "none" << endl;}else if (lsort && !csort)cout << "lengths" << endl;elsecout << "lexicographically" << endl;return 0;
}

2、求最小公倍数

入口:题目入口

题目描述:
在这里插入图片描述

解题思路
最小公倍数 = 两数之积除以最大公约数,这里使用碾转相除法进行最大公约数的求解:即a与b的最大公约数可以转化为a、b之间的余数为两者之间最小的数之间的公约数。所以对于输入的两个数进行连续求余,直到余数为0,求余的分母即为结果

代码展示

#include <iostream>
using namespace std;int gcb(int a, int b)
{int c;while (c = a % b){a = b;b = c;}return b;
}
int main() {int a, b;int v;while (cin >> a >> b) { // ×¢Òâ while ´¦Àí¶à¸ö caseif (a < b){int t = a;a = b;b = t;}int ret = gcb(a, b);cout << a * b / ret << endl;}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode —— 17. 电话号码的字母组合

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

配置vite自动按需引入 vant 组件

为什么学 按需加载可以减少包体积,优化加载性能 学习内容 全局注册组件 import 需要的组件import 组件样式使用 app.use 注册组件 Tree Shaking 介绍使用 什么是 tree shaking&#xff1f; Tree shaking是一种优化技术&#xff0c;用于减少JavaScript或其他编程语言中未被使用…

EAS之WALT算法介绍

EAS调度器缘起 Linux内核的一直都使用完全公平调度器CFS(Completely Fair Scheduler)作为默认调度器&#xff0c;但是在使用中发现CFS如下几个问题。 1. CFS主要是为了服务器性能优先场景而设计的&#xff0c;主要目标是最大限度地提高系统的吞吐量&#xff0c;CFS调度的目标…

IDEA快捷键大全

提示&#xff1a; ① 主要记录我在使用 IDEA 开发的过程中用到的快捷键&#xff0c;可以提高开发速度。 ② 不一定要全部记住&#xff0c;主要是当一个参考文档&#xff0c;大家有一点印象&#xff0c;随时可以查看。 参考博客 > IntelliJ IDEA 快捷键说明大全&#xff08;官…

写静态页面——浮动练习

0、效果&#xff1a; 1、html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>浮动…

漏洞原理XSS存贮型漏洞

漏洞原理XSS存贮型漏洞 XSS(跨站脚本攻击)是一种常见的Web安全漏洞,它允许攻击者将恶意代码注入到网页中,进而攻击用户的浏览器。存储型XSS漏洞是一种特定类型的XSS漏洞,它发生在Web应用程序中,其中用户输入的数据被存储在数据库或其他持久性存储中,并在页面重新加载时被…

【2024-01-20】 瑞幸咖啡小程序-blackbox

需要联系主页V 瑞幸咖啡小程序 登入需要过同盾滑块下单需要balckbox参数 测试 下单 过滑块 登入发短信 加密参数

CANoe实际项目中文件夹的规划

本人&#xff0c;之前设计了一个CANoe工程&#xff0c;由于工程设计之初没有设计好文档的归纳分类&#xff0c;导致文件查找起来非常费劲。 为了避免以后出现文件混乱&#xff0c;不可查找的问题&#xff0c;故特此归纳说明。 建立工程时&#xff1a; 第1步就应该设计好文档…

【Vue】2-2、MVVM 简介

一、MVVM 简介 MVVM 是 vue 实现数据驱动视图和双向数据绑定的核心原理。 MVVM 指的是 Model、View 和 ViewModel &#xff0c;它把每个 html 页面都拆分成了这三个部分 二、MVVM 工作原理 ViewModel 作为 MVVM 的核心&#xff0c;是它把当前页面的数据源&#xff08;Model…

SpringBoot+BCrypt算法加密

BCrypt是一种密码哈希函数&#xff0c;BCrypt算法使用“盐”来加密密码&#xff0c;这是一种随机生成的字符串&#xff0c;可以在密码加密过程中使用&#xff0c;以确保每次加密结果都不同。盐的使用增强了安全性&#xff0c;因为攻击者需要花费更多的时间来破解密码。 下图为…

spark-cannot resolve overloaded method

使用split方法&#xff0c;出现错误&#xff1a;cannot resolve overloaded method 解决方法:那个regex应该是自动生成&#xff0c;所以split括号中输入空引号即可。 入门学习人的愚笨&#xff0c;也要继续坚持&#xff0c;加油&#xff01;

小程序软件测试应该怎么做?有什么作用?

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;小程序软件的使用越来越广泛。无论是企业推广还是个人创作&#xff0c;小程序软件都具备了很大的潜力和市场空间。然而&#xff0c;在发布之前&#xff0c;进行充分的测试是至关重要的&#xff0c;以确保用户体验的顺畅…