• 【C++笔试强训】第十一天


    🎇C++笔试强训


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

    在这里插入图片描述

    💦 🔥


    选择题

    💦第一题

    关于内联函数说法错误的是()

    A 不是任何一个函数都可定义成内联函数
    B 内联函数的函数体内不能含有复杂的结构控制语句
    C 递归函数可以被用来作为内联函数
    D 内联函数一般适合于只有1~5行语句的小函数

    关于内联函数我们提过很多次了

    A 内联函数是有要求的,所以A正确
    B 内联函数不可以太复杂,B正确
    C 递归不可以做内联
    D 内联函数建议不要太长,C++官方文档建议1-5行

    这道题的答案是C


    💦第二题

    以下不是double compare(int,int)的重载函数的是()

    A int compare(double,double)
    B double compare(double,double)
    C double compare(double,int)
    D int compare(int,int)

    关于函数重载,函数名要一样,参数列表要求不一样,和返回值类型没有关系

    这道题答案是D


    💦第三题

    假定有类AB,有相应的构造函数定义,能正确执行

    AB a(4),b(5),c[3],*p[2]={&a,&b};
    
    • 1

    语句,请问执行完此语句后共调用该类的构造函数次数为___

    A 5
    B 4
    C 3
    D 9

    创建ab各调用一次,创建数组c包含3个对象调用3次,p是个指针数组,存放的是指针,所以p不会调用构造函数

    这道题的答案是A


    💦第四题

    下列关于赋值运算符“=”重载的叙述中,正确的是

    A 赋值运算符只能作为类的成员函数重载
    B 默认的赋值运算符实现了“深层复制”功能
    C 重载的赋值运算符函数有两个本类对象作为形参
    D 如果己经定义了复制拷贝构造函数,就不能重载赋值运算符

    如果用户在类中没有显示定义赋值运算符重载时,编译器自动生成一份——按照浅拷贝方式实现的

    A 赋值运算符重载如果重载成普通的成员函数编译器会报错,编译无法通过
    B 默认的赋值运算符是编译器自动生成的,按照浅拷贝实现,错误
    C 赋值运算符重载只可以放一个类型,前面有一个隐藏的this,错误
    D 拷贝构造和重载赋值运算符是两个函数,不冲突,错误

    这道题的答案是A


    💦第五题

    下列有关静态成员函数的描述中,正确的是:

    A 静态数据成员(非const类型)可以在类体内初始化
    B 静态数据成员不可以被类对象调用
    C 静态数据成员不受private控制符作用
    D 静态数据成员可以直接用类名调用

    A 静态成员是所有类共享的,所以就不可以在类内初始化
    B 可以通过类名+作用域的方式访问
    C 静态成员如果是类的成员都要受控制符访问
    D 静态数据成员可以直接用类名调用,一般更推荐类名+作用域访问

    这道题的答案是D


    💦第六题

    若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是()

    A 2
    B 3
    C 0
    D 1

    ad是一个数组指针,是一个指针,该指针将来只能指向PAT类型的3个连续的空间,没有创建对象,所以不会调用构造函数

    这道题的答案是C


    💦第七题

    下面对析构函数的正确描述是()

    A 系统不能提供默认的析构函数
    B 析构函数必须由用户定义
    C 析构函数没有参数
    D 析构函数可以设置默认参数

    请添加图片描述

    A 系统会提供默认析构
    B 析构函数可以由系统提供默认的
    C 析构函数没有参数,如果有参数编译器会报错,(所以析构函数不能重载)
    D 析构函数没有参数,无法设置默认值

    这道题的答案是C


    💦第八题

    关于以下代码,哪个说法是正确的()

    myClass::foo(){
    	delete this;
    }
    ..
    void func(){
    	myClass *a = new myClass();
    	a->foo();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    A 它会引起栈溢出
    B 都不正确
    C 它不能编译
    D 它会引起段错误

    delete this 代表把当前对象销毁掉

    func里面为a new新空间,然后用a指向foo,然后将a对象销毁掉,所以代码没有任何问题

    这道题的答案是B


    💦第九题

    哪种说法是错误的()?

    A 构造函数可以有形参
    B 析构函数可以有形参
    C 构造函数无任何函数类型
    D 析构函数无任何函数类型

    A 构造函数可以有形参,在类中可能有多个成员变量
    B 析构函数没有参数
    CD 析构函数和构造函数无任何参数类型

    这道题的答案是B


    💦第十题

    有如下模板定义:

    template <class T>
    T fun(T x,T y){
    	return x*x+y*y;
    }
    
    • 1
    • 2
    • 3
    • 4

    在下列对fun的调用中,错误的是()

    A fun(1, 2)
    B fun(1.0, 2)
    C fun(2.0, 1.0)
    D fun(1, 2.0)

    fun在实例化时,其传递的两个参数的类型必须要一致,如果不一致的话需要显示实例化

    请添加图片描述

    这道题的答案是B


    编程题

    🔥第一题

    链接:最近的公共祖先

    请添加图片描述

    • 题目解析

    最近公共祖先表示距离两个节点最近的公共父节点,这道题考察二叉树。

    • 解题思路

    题目所描述的满二叉树如下: 1 / \ 2 3 / \ / \ 4 5 6 7 上述树中子节点与父节点之间的关系为root = child / 2所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先 比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先

    • 代码演示:
    class LCA {
    public:
        int getLCA(int a, int b) {
            // write code here
            while(a != b)
            {
                if(a > b)
                    a /= 2;
                else
                    b /= 2;
            }
            return b;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    🔥第二题

    链接:求最大连续bit数

    请添加图片描述

    • 题目解析

    这道题考察位运算

    • 解题思路

    根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计数。

    • 代码演示:
    #include 
    using namespace std;
    
    int main() {
        int n;
        while (cin >> n) {
            int count = 0, maxcount = 0;
            //如果测试用例是-1时无法通过,以为右移动会补符号位
            // while (n) {
            //     if (n & 1) {
            //         count++;
            //         maxcount = max(count, maxcount);
            //     } else {
            //         count = 0;
            //     }
            //     n = n >> 1;
            // }
    
            //此时的解决方法是将1往左移,不改变n
            for(int i = 0;i < 32;i++)
            {
                if(n &(1 << i))
                {
                    count++;
                    maxcount = max(count,maxcount);
                }
                else
                    count = 0;
            }
    
            cout << maxcount << endl;
        }
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

  • 相关阅读:
    React原理
    【UE5 C++ 學習日志】01. UEnhancedInput
    idea 启动项目报错 Command line is too long
    树的引进以及二叉树的基础讲解——【数据结构】
    强制缓存和协商缓存的区别是什么?对称、非对称加密的区别是什么?
    windows10下SQL Prompt安装和注册
    51单片机外设篇:ADC
    Springboot美术外包服务平台 60u1s计算机毕业设计-课程设计-期末作业-毕设程序代做
    MindSpore:【model_zoo】【resnet】尝试用THOR优化器运行时报cannot import name ‘THOR‘
    【C语言】病人信息管理系统
  • 原文地址:https://blog.csdn.net/m0_60338933/article/details/127485619