备战秋招 | 笔试强训14

news2025/1/8 5:34:29

目录

一、选择题

二、编程题

三、选择题题解 

四、编程题题解


一、选择题

1、下列有关this指针使用方法的叙述正确的是()

A. 保证基类保护成员在子类中可以被访问

B. 保证基类私有成员在子类中可以被访问

C. 保证基类共有成员在子类中可以被访问

D. 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码

2、有一个类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

3、下面说法正确的是()

A. C++已有的任何运算符都可以重载

B. const对象只能调用const类型成员函数

C. 构造函数和析构函数都可以是虚函数

D. 函数重载返回值类型必须相同

4、下面说法正确的是()

A. 一个空类默认一定生成构造函数,拷贝构造函数,赋值操作符,引用操作符,析构函数

B. 可以有多个析构函数

C. 析构函数可以为virtual,可以被重载

D. 类的构造函数如果都不是public访问属性,则类的实例无法创建

5、面向对象设计中的继承和组合,下面说法错误的是?()

A. 继承允许我们覆盖重写父类的实现细节,父类的实现对于子类是可见的,是一种静态复用,也称为白盒复用

B. 组合的对象不需要关心各自的实现细节,之间的关系是在运行时候才确定的,是一种动态复用,也称为黑盒复用

C. 优先使用继承,而不是组合,是面向对象设计的第二原则

D. 继承可以使子类能自动继承父类的接口,但在设计模式中认为这是一种破坏了父类的封装性的表现

6、关于重载和多态正确的是

A. 如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针 调用父类方法时,实际调用的是子类的方法

B. 选项全部都不正确

C. 重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{ void test(float a){cout<<"1";} };

class B:public A{ void test(int b){cout<<"2";} };

A *a=new A;

B *b=new B;

a=b; a.test(1.1);

结果是1

7、以下程序的输出是()

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;
    return 0;
}

A. 11

B. 101

C. 12

D. 102

8、下面 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);
    return 0;
}

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

9、下列哪种函数可以定义为虚函数()

A. 构造函数

B. 析构函数

C. 内联成员函数

D. 静态成员函数

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

#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

二、编程题

1、计算日期到天数转换  题目链接

2、幸运的袋子  题目链接

三、选择题题解 

1、下列有关this指针使用方法的叙述正确的是()

A. 保证基类保护成员在子类中可以被访问

B. 保证基类私有成员在子类中可以被访问

C. 保证基类共有成员在子类中可以被访问

D. 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码

正确答案:D

题解:

         D选项描述正确,概念题;

2、有一个类B继承自类A,他们数据成员如下:则构造函数中,成员变量一定要通过初始化列表来初始化的是____。

class A 
{
privateint 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

正确答案:F

题解:

         必须在初始化列表中进行初始化的有以下,1、const修饰的普通成员变量;2、引用对象;3、无默认构造的类成员;不难选出答案F;

3、下面说法正确的是()

A. C++已有的任何运算符都可以重载

B. const对象只能调用const类型成员函数

C. 构造函数和析构函数都可以是虚函数

D. 函数重载返回值类型必须相同

正确答案:B

题解:

        A选项,C++中有五种无法被重载的运算符,分别为 .(点) .*(点星) ::(作用域)  sizeof(计算大小) :? (三目); 因此A错误;B选项,const修饰函数即修饰this指针,假设有一个类叫A,则默认this指针的类型为 A* const this,用const修饰后,为 const A* const this;如果不用const修饰函数,const对象会发生权限放大;因此,const对象只能调用const修饰的成员函数,故B正确;C选项,构造函数不能使虚函数,因此虚表在构造函数的初始化列表中初始化,可如果将构造函数设置为虚函数的话,此时虚表都不存在,virtual修饰的构造函数又放哪呢,故C错误;D选项,函数重载要求函数名相同,函数参数个数或参数类型不同,故D错误;

4、下面说法正确的是()

A. 一个空类默认一定生成构造函数,拷贝构造函数,赋值操作符,引用操作符,析构函数

B. 可以有多个析构函数

C. 析构函数可以为virtual,可以被重载

D. 类的构造函数如果都不是public访问属性,则类的实例无法创建

正确答案:A

题解:

         A选项,描述正确;B选项,析构函数不能重载,因此只能有一个;C选项,析构函数可以用virtual修饰,可以在子类中被重写,跟重载并无任何关系;D选项,此时可以提供一个公有的静态成员函数,在静态成员函数内调用构造函数实例化出对象;

5、面向对象设计中的继承和组合,下面说法错误的是?()

A. 继承允许我们覆盖重写父类的实现细节,父类的实现对于子类是可见的,是一种静态复用,也称为白盒复用

B. 组合的对象不需要关心各自的实现细节,之间的关系是在运行时候才确定的,是一种动态复用,也称为黑盒复用

C. 优先使用继承,而不是组合,是面向对象设计的第二原则

D. 继承可以使子类能自动继承父类的接口,但在设计模式中认为这是一种破坏了父类的封装性的表现

正确答案:C

题解:

         C选项,有限使用组合,而不是继承,因为一个项目工程尽量做到高内聚,低耦合,因此优先使用组合;

6、关于重载和多态正确的是

A. 如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针 调用父类方法时,实际调用的是子类的方法

B. 选项全部都不正确

C. 重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{ void test(float a){cout<<"1";} };

class B:public A{ void test(int b){cout<<"2";} };

A *a=new A;

B *b=new B;

a=b; a.test(1.1);

结果是1

正确答案:B

题解:

         A选项,只有实现了多态,才可能使用不同的对象调用不同的方法,很明显,描述不符合多态的要求,多态有两个要求:1、虚函数的重写;2、用父类的指针或引用调用;故A错误;C选项,重载跟子类没有任何关系;D选项,这里有两处语法错误,1是A类对象的test函数默认为私有,无法调用;2是调用对象处应该用箭头而不应该用点,因为a是一个A类对象的指针;

7、以下程序的输出是()

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;
    return 0;
}

A. 11

B. 101

C. 12

D. 102

正确答案:C

题解:

         首先,我们观察,func1是不虚函数,func2是虚函数,并完成了重写;我们new 一个子类对象并将x初始化为1,然后用基类指针指向创建出来的对象,我们用父类指针调用func1时,由于不构成多态,因此调用的是父类的func1,将x*=10 ;此时x等于10;然后我们在func1中调用func2,这是其实我们用隐藏的this指针调用func2的,并且this指针为父类指针,此时构成重载,调用子类的func2,对x+=2;因此我们在打印x时,答案为12;

8、下面 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);
    return 0;
}

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

正确答案:A

题解:

         此题主要考察多态,我们可以看到三个类的对象中的display都为虚函数,并且完成了重写;但是多态还需要用父类的指针或引用调用,而题目中的fun函数是用父类对象调用,因此不构成多态,都调用父类的fun函数,故选A;

9、下列哪种函数可以定义为虚函数()

A. 构造函数

B. 析构函数

C. 内联成员函数

D. 静态成员函数

正确答案:B

题解:

         A选项,构造函数不能定义为虚函数,前面解释过,这里就不解释了;B选项,析构函数可以定义为虚函数;C选项,内联函数是在调用出直接展开,不会压栈;因此内联函数不能定义为虚函数;D选项,静态成员没有this指针,所以无法定义为虚函数;

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

#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

正确答案:A

题解:

        这题考察菱形虚拟继承,仔细阅读题目,不难发现,本题就是菱形虚拟继承,此时A中的数据成员只会保存一份,而B类与C类中会分别有一个虚表指针,指向各自的虚表,其中储存A类数据成员的偏移量;再回到题目,我们需要清楚的是,初始化列表中初始化的顺序只与继承或声明顺序有关,因此首先会调用D类的构造函数,其中初始化列表会先调用A类构造函数,然后调用B类的构造函数,接着调用C类构造函数,最后打印D;故选A;

四、编程题题解

1、计算日期到天数转换

思路:我们创建一个数组,数组中保存到每一个月所需要的天数,然后我们通过数组得到month月之前所有的天数,然后加上当前天数即可(平闰年需要特别注意)

#include <iostream>
using namespace std;
// 判断平闰年
bool is_leap(int year)
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int main() 
{
    int year, month, day;
    cin >> year >> month >> day;
    // 天数数组
    int monthDays[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
    // 得到month月之前所有天数
    int ret = monthDays[month - 1];
    ret += day;
    // 闰年特殊判断
    if(is_leap(year) && month > 2)
        ret += 1;
    cout << ret << endl;
    return 0;
}

2、幸运的袋子

思路:DFS+剪枝+回溯,本题可看作一道排列组合题目,首先分析题意,我们根据数论可以得出袋子中必定有1,然后题目是要求我们组合出幸运袋子的个数,我们可以往袋子里依次放求,组合出不同的情况,以下为图解;

        以上画出了部分的图,这种组合类似一种树状结构,我们通过这种深度遍历+剪枝+回溯很快可以找出所有情况;具体看代码;

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int get_lucky_bag(vector<int>& bag, int pos, int sum, int multi)
{
    // 统计到当前栈帧幸运袋子个数
    int count = 0;
    // 从pos位置开始往后加
    for(int i = pos; i < bag.size(); i++)
    {
        sum += bag[i];
        multi *= bag[i];
        // 判断当前是否为幸运袋子
        if(sum > multi)
        {
            // 递归下一个位置 + 当前位置个数
            count += 1 + get_lucky_bag(bag, i + 1, sum, multi);
        }
        else if(bag[i] == 1)
        {
            // 当前为1且不为幸运袋子,特殊处理往下继续递归
            count += get_lucky_bag(bag, i + 1, sum, multi);
        }
        else
        {
            // 因为排过序,这个位置的球序号都不是,后面比这大的更不是,进行剪枝
            break;
        }
        // 上层递归结束,进行回溯,把和与乘积还原
        sum -= bag[i];
        multi /= bag[i];
        // 去重工作,因此题目说过相同序号的球是无区别的
        while(i + 1 < bag.size() && bag[i] == bag[i + 1])
            i++;
    }
    return count;
}

int main() 
{
    int n;
    cin >> n;
    // 将数据放入vector中
    vector<int> v(n, 0);
    for(int i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    // 排序,方面后续剪枝
    sort(v.begin(), v.end());
    // 参数分别为数据数组,从什么位置开始,和,积
    cout << get_lucky_bag(v, 0, 0, 1);
}

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

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

相关文章

机器学习 day31(baseline)

语音识别的Jtrain、Jcv和人工误差 对于逻辑回归问题&#xff0c;Jtrain和Jcv可以用分类错误的比例&#xff0c;这一方式来代替单单只看Jtrain&#xff0c;不好区分是否高偏差。可以再计算人类识别误差&#xff0c;即人工误差&#xff0c;作为基准线Jtrain与baseline对比只高了…

keepalived + lvs (服务端socket 客户端socket) udp协议

1、Keepalived 1. 1 keepalived 简介 1.1.1 什么是keepalived Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案&#xff0c;可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived&#xff0c;一台为主服务器&#xff08;MASTER&#xff09;&#xff…

MFC第二十二天 三种绘图句柄与三大坐标系(三大CDC派生类)简介以及应用、Invalidate刷新函数的功能和用法简介

文章目录 三种绘图句柄与三大坐标系&#xff08;三大CDC派生类&#xff09;简介以及应用三种HDC句柄三大CDC派生类什么是放泄露架构使用HDC句柄进行常见图形绘制演示 HPEN和HBRUSH句柄HPEN的创建 Invalidate刷新函数的功能和用法简介应用Win32下MFC下 附录 三种绘图句柄与三大坐…

【算法题解】51. 二叉树的最近公共祖先

这是一道 中等难度 的题 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

MySQL创建全文索引时,遇到“Temporary file write failure”的错误

MySQL创建全文索引时&#xff0c;遇到“Temporary file write failure”的错误 环境信息 MySQL Version: 8.0.28 engine: InnoDB rows: 100 index length: 10MB data length: 30MB 笔者在MYSQL上执行创建添加全文索引的语句&#xff1a;alter table users add fulltext index …

机器学习原理(1)集成学习基本方法

一.什么是集成学习 集成学习&#xff08;ensemble learning&#xff09;通过将多个学习器进行组合来完成学习任务。下图显示集成学习的一般结构&#xff08;取自周志华老师的西瓜书&#xff09;&#xff0c;个体学习器通常由一种现有的学习算法从训练数据产生&#xff0c;例如…

Vue项目实战失物招领

经过两天的时间&#xff0c;搞定了一个Vue版本的项目&#xff0c;在这里留下这两天的点点滴滴&#xff0c;这个项目主要实现了失物招领的相关功能&#xff0c;比如发布丢失信息&#xff0c;发布拾到信息&#xff0c;跑腿信息&#xff0c;用户注册&#xff0c;用户登录等相关功能…

故障分析 | Kubernetes 故障诊断流程

一、本文概述及主要术语 1.1 概述 本文基于 Pod 、Service 和 Ingress 三大模块进行划分&#xff0c;对于 Kubernetes 日常可能出现的故障问题&#xff0c;提供了较为具体的排查步骤&#xff0c;并附上相关解决方法或参考文献。 1.2 主要术语 Pod: Kubernetes 中创建和管理的…

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种&#xff1a; 实现库&#xff1a;提供具体的日志实现&#xff0c;例如日志级别的控制、打印格式、输出目标等。外观库&#xff1a;自身不提供日志实现&#xff0c;而是对其他日志库进行封装&#xff0c;从而方便使用。基于外观模式实…

接口自动化测试-Python+Requests+Pytest+YAML+Allure配套撸码(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口自动化框架&a…

软件测试/测试开发丨Pytest测试框架学习笔记

Pytest 参数化用例 测试登录场景 测试登录成功&#xff0c;登录失败(账号错误&#xff0c;密码错误)*创建多种账号: 中⽂文账号&#xff0c;英⽂文账号*普通测试用例方法Copy 多份代码 or 读⼊入参数?*一次性执⾏多个输⼊入参数* def test_param_login_ok():# 登录成功user…

解决分类任务中数据倾斜问题

大家好&#xff0c;在处理文本分类任务时&#xff0c;基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里&#xff0c;本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习&#xff08;ML&#xff09;应用于真实世界的…

selenium---滑动框验证码破解

前言 目前常见的验证码有很多种&#xff0c;比如数字验证码&#xff0c;滑动验证码&#xff0c;以及滑动补全图像验证码等&#xff0c;关于验证码的操作属于我们在UI自动化很大的一个障碍&#xff0c;今天安静来介绍下如何通过python来实现我们滑动验证码 滑动验证码 先来一…

MySQL之全文索引二三事

全文索引 MySQL全文索引是一种用于快速搜索文本字符串的索引&#xff0c;在MySQL数据库中&#xff0c;它可以用来提高文本搜索的效率。全文索引不同于普通索引&#xff0c;普通索引只是对列值进行排序&#xff0c;而全文索引则会对列的内容进行分词&#xff0c;并且对每个分词…

RocketMQ重复消费的解决方案::分布式锁直击面试!

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

go-zero学习 第六章 分布式事务dtm

go-zero学习 第六章 分布式事务dtm 1 参考文档2 官方示例3 go-zero使用dtm参考代码3.1 go-zero支持dtm 代码操作步骤※3.2 gozerodtm 代码操作步骤 4 注意事项4.1 grpc接口地址※4.2 动态调用过程4.3 dtm的回滚补偿4.4 barrier的空补偿、悬挂等4.5 barrier在rpc中本地事务 1 参…

多媒体工作中用到的小工具

安利下嵌入式多媒体用到的各种小工具 下面是同事们推荐的 以下是对这些软件的简要介绍: ocenaudio:ocenaudio是一款跨平台的音频编辑软件,它提供了直观的界面和丰富的功能,可以帮助用户进行音频剪辑、修复、转码等操作。 MKVToolNix:MKVToolNix是一款开源的多媒体容器格…

web-vim信息泄露

&#xff08;1&#xff09;知识补充 vim 交换文件名 在使用vim时会创建临时缓存文件&#xff0c;关闭vim时缓存文件则会被删除&#xff0c;当vim异常退出后&#xff0c;因为未处理缓存文件&#xff0c;导致可以通过缓存文件恢复原始文件内容   以 index.php 为例&#xff1…

Redis一主二从三哨兵模式

文章目录 Redis一主二从三哨兵模式环境配置实践配置主从配置哨兵模式 测试主从复制测试模拟master宕机恢复master Redis一主二从三哨兵模式 当你使用Redis作为主从复制的架构&#xff0c;并且希望在出现主节点故障时自动进行故障转移时&#xff0c;适用于一主而从三哨兵模式。…