备战秋招 | 笔试强训16

news2024/12/27 11:23:24

目录

一、选择题

二、编程题

三、选择题题解 

四、编程题题解


一、选择题

1、下列一段 C++ 代码的输出结果是()

#include <iostream>
class Base
{
public:
    int Bar(char x)
    {
        return (int)(x);
    }
    virtual int Bar(int x)
    {
        return (2 * x);
    }
};
class Derived : public Base
{
public:
    int Bar(char x)
    {
        return (int)(-x);
    }
    int Bar(int x)
    {
        return (x / 2);
    }
};
int main(void)
{
    Derived Obj;
    Base *pObj = &Obj;
    printf("%d,", pObj->Bar((char)(100)));
    printf("%d,", pObj->Bar(100));
    return 0;
 }

A. 100,-100

B. 100,50

C. 200,-100

D. 200,50

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

A. 虚函数是一个static型的函数

B. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型

C. 虚函数是一个非成员函数

D. 基类中说明了虚函数后,派生类中起对应的函数可以不必说明为虚函数

3、代码执行后,a和b的值分别为?

// 32位环境下
class Test
{
public:
    int a;
    int b;
    virtual void fun() {}
    Test(int temp1 = 0, int temp2 = 0)
    {
        a=temp1 ;
        b=temp2 ;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
};
int main()
{
    Test obj(5, 10);
    // Changing a and b
    int* pInt = (int*)&obj;
    *(pInt+0) = 100;
    *(pInt+1) = 200;
    cout << "a = " << obj.getA() << endl;
    cout << "b = " << obj.getB() << endl;
    return 0;
}

A. 200 10

B. 5 10

C. 100 200

D. 100 10 

4、当一个类的某个函数被说明为virtual,则在该类的所有派生类中的同原型函数_____?

A. 只有 被重新说明时才识虚函数

B. 只有被重新说明为virtual时才是虚函数

C. 都不是虚函数

D. 都是虚函数

5、下面有关虚函数和非虚函数的区别说法错误的是?

A. 子类的指针访问虚函数访问的是子类的方法

B. 子类的指针访问非虚函数访问的是子类的方法

C. 父类的指针访问虚函数访问的是父类的方法

D. 父类的指针访问非虚函数访问的是父类的方法

6、下列程序的输出结果:

#include <iostream>
using namespace std;
class A
{
public:
    void print()
    {
        cout << "A:print()";
    }
};
class B: private A
{
public:
    void print()
    {
        cout << "B:print()";
    }
};
class C: public B
{
public:
    void print()
    {    
        A:: print();
    }
};
int main()
{
    C b;
    b.print();
    return 0;
}

A. A:print()

B. B:print()

C. 编译出错

7、以下关于C++的描述中哪一个是正确的()

A. 任何指针都必须指向一个实例

B. 子类指针不可以指向父类实例

C. 任何引用都必须指向一个实例

D. 引用所指向的实例不可能无效

8、下面关于多态性的描述,错误的是()

A. C++语言的多态性分为编译时的多态性和运行时的多态性

B. 编译时的多态性可通过函数重载实现

C. 运行时的多态性可通过模板和虚函数实现

D. 实现运行时多态性的机制称为动态绑定

9、写出下面程序的输出结果

class A
{
public:
    void FuncA()
    {
        printf( "FuncA called\n" );
    }
    virtual void FuncB()
    {
        printf( "FuncB called\n" );
    }
};
class B : public A
{
public:
    void FuncA()
    {
        A::FuncA();
        printf( "FuncAB called\n" );
    }
    virtual void FuncB()
    {
        printf( "FuncBB called\n" );
    }
};
void main( void )
{
     B b;
     A *pa;
     pa = &b;
     A *pa2 = new A;
     pa->FuncA(); ( 3)
     pa->FuncB(); ( 4)
     pa2->FuncA(); ( 5)
     pa2->FuncB();
     delete pa2;
     return 0;
}

A. FuncA called FuncB called FuncA called FuncB called

B. FuncA called FuncBB called FuncA called FuncB called

C. FuncA called FuncBB called FuncAB called FuncBB called

D. FuncAB called FuncBB called FuncA called FuncB called

10、在32位环境下,以上程序的输出结果是?

#include<iostream>
using namespace std;
class Base
{
public:
    virtual int foo(int x)
    {
        return x * 10;
    }
    int foo(char x[14])
    {
        return sizeof(x) + 10;
    }
};
class Derived: public Base
{
    int foo(int x)
    {
        return x * 20;
    }
    virtual int foo(char x[10])
    {
        return sizeof(x) + 20;
    }
} ;
int main()
{
    Derived stDerived;
    Base *pstBase = &stDerived;
    char x[10];
    printf("%d\n", pstBase->foo(100) + pstBase->foo(x));
    return 0;
}

A. 2000
B. 2004
C. 2014
D. 2024

二、编程题

1、完全数计算  题目链接

2、扑克牌大小  题目链接

三、选择题题解 

1、下列一段 C++ 代码的输出结果是()

#include <iostream>
class Base
{
public:
    int Bar(char x)
    {
        return (int)(x);
    }
    virtual int Bar(int x)
    {
        return (2 * x);
    }
};
class Derived : public Base
{
public:
    int Bar(char x)
    {
        return (int)(-x);
    }
    int Bar(int x)
    {
        return (x / 2);
    }
};
int main(void)
{
    Derived Obj;
    Base *pObj = &Obj;
    printf("%d,", pObj->Bar((char)(100)));
    printf("%d,", pObj->Bar(100));
    return 0;
 }

A. 100,-100

B. 100,50

C. 200,-100

D. 200,50

正确答案:B

题解:

         首先我们观察题目,父类与子类中都有两个叫bar的函数,其中形参为int的是虚函数,并进行了重写,形参为char的与这个虚函数构成重载;我们在看主函数中,我们实例化了一个子类对象,并用父类指针指向它,然后我们调用父类char类的那个接口,返回100;接着我们调用int那个接口,这个接口声明成了虚函数,又是用父类的指针调用,构成多态,可是该指针原本指向的是一个子类对象,因此这里调用子类的那个虚函数,返回打印50;故选B;

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

A. 虚函数是一个static型的函数

B. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型

C. 虚函数是一个非成员函数

D. 基类中说明了虚函数后,派生类中起对应的函数可以不必说明为虚函数

正确答案:D

题解:

         A选项,虚函数不可能是静态成员函数,因为静态成员函数没有this指针;B选项,虚函数的重写必须满足返回值相同,函数名相同,函数参数相同(除了协变与析构);C选项,虚函数必须为成员函数,非成员函数没有this指针;D选项,正确;

3、代码执行后,a和b的值分别为?

class Test
{
public:
    int a;
    int b;
    virtual void fun() {}
    Test(int temp1 = 0, int temp2 = 0)
    {
        a=temp1 ;
        b=temp2 ;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
};
int main()
{
    Test obj(5, 10);
    // Changing a and b
    int* pInt = (int*)&obj;
    *(pInt+0) = 100;
    *(pInt+1) = 200;
    cout << "a = " << obj.getA() << endl;
    cout << "b = " << obj.getB() << endl;
    return 0;
}

A. 200 10

B. 5 10

C. 100 200

D. 100 10 

正确答案:A

题解:

         这里有个小坑,可能很多人会选C选项,这题实际上有个虚函数,既然类中声明了虚函数,那必然有虚表指针,而虚表指针一般都放在类的起始位置;因此我们取类的地址并强制转换成int*类型,指向的就是开头的虚表指针,我们首先将虚表指针改为100;在将第二个元素a改为200;构造中b初始化为10;故此题选A;

4、当一个类的某个函数被说明为virtual,则在该类的所有派生类中的同原型函数_____?

A. 只有 被重新说明时才识虚函数

B. 只有被重新说明为virtual时才是虚函数

C. 都不是虚函数

D. 都是虚函数

正确答案:D

题解:

         只要在父类中声明为virtual函数,那么其所有子类中的同型函数都为虚函数;

5、下面有关虚函数和非虚函数的区别说法错误的是?

A. 子类的指针访问虚函数访问的是子类的方法

B. 子类的指针访问非虚函数访问的是子类的方法

C. 父类的指针访问虚函数访问的是父类的方法

D. 父类的指针访问非虚函数访问的是父类的方法

正确答案:C

题解:

         C选项中说父类的指针访问虚函数必然是访问父类的方法,其实也不一定,要是构成多态了呢?可能访问子类的同型函数;

6、下列程序的输出结果:

#include <iostream>
using namespace std;
class A
{
public:
    void print()
    {
        cout << "A:print()";
    }
};
class B: private A
{
public:
    void print()
    {
        cout << "B:print()";
    }
};
class C: public B
{
public:
    void print()
    {    
        A:: print();
    }
};
int main()
{
    C b;
    b.print();
    return 0;
}

A. A:print()

B. B:print()

C. 编译出错

正确答案:C

题解:

         仔细观察,在B继承父类时,是私有继承方式,对子类是不可见的,因此,无法在C类中调用A类的print函数;故编译错误,选C;

7、以下关于C++的描述中哪一个是正确的()

A. 任何指针都必须指向一个实例

B. 子类指针不可以指向父类实例

C. 任何引用都必须指向一个实例

D. 引用所指向的实例不可能无效

正确答案:C

题解:

         A选项,可以有指向空的指针;B选项,可通过强制类型转换或dynamic_cast的方式将子类指针指向父类;C选项,描述正确;D选项,若引用的对象空间是在堆上动态申请的,那么该空间析构时,引用所指向的实例无效;

8、下面关于多态性的描述,错误的是()

A. C++语言的多态性分为编译时的多态性和运行时的多态性

B. 编译时的多态性可通过函数重载实现

C. 运行时的多态性可通过模板和虚函数实现

D. 实现运行时多态性的机制称为动态绑定

正确答案:C

题解:

         C选项,模板与多态没有任何关系;

9、写出下面程序的输出结果

class A
{
public:
    void FuncA()
    {
        printf( "FuncA called\n" );
    }
    virtual void FuncB()
    {
        printf( "FuncB called\n" );
    }
};
class B : public A
{
public:
    void FuncA()
    {
        A::FuncA();
        printf( "FuncAB called\n" );
    }
    virtual void FuncB()
    {
        printf( "FuncBB called\n" );
    }
};
void main( void )
{
     B b;
     A *pa;
     pa = &b;
     A *pa2 = new A;
     pa->FuncA(); ( 3)
     pa->FuncB(); ( 4)
     pa2->FuncA(); ( 5)
     pa2->FuncB();
     delete pa2;
     return 0;
}

A. FuncA called FuncB called FuncA called FuncB called

B. FuncA called FuncBB called FuncA called FuncB called

C. FuncA called FuncBB called FuncAB called FuncBB called

D. FuncAB called FuncBB called FuncA called FuncB called

正确答案:B

题解:

         首先观察题目,FuncA不是虚函数,在子类中,将父类的FuncA隐藏起来了;FuncB是虚函数,且完成了重写;首先pa是A类型指针,指向子类,pa2也是A类型指针,指向父类;分别调用FuncA与FuncB时,pa调用FuncA函数时调用A类中的FuncA,调用FuncB时构成多态,调用子类的FuncB,接着pa2本身指向的就是父类,因此调用FuncA与FuncB时都是调用父类的;故选B;

10、在32位环境下,以上程序的输出结果是?

#include<iostream>
using namespace std;
class Base
{
public:
    virtual int foo(int x)
    {
        return x * 10;
    }
    int foo(char x[14])
    {
        return sizeof(x) + 10;
    }
};
class Derived: public Base
{
    int foo(int x)
    {
        return x * 20;
    }
    virtual int foo(char x[10])
    {
        return sizeof(x) + 20;
    }
} ;
int main()
{
    Derived stDerived;
    Base *pstBase = &stDerived;
    char x[10];
    printf("%d\n", pstBase->foo(100) + pstBase->foo(x));
    return 0;
}

A. 2000
B. 2004
C. 2014
D. 2024

正确答案:C

题解:

        此题函数声明的与我们的第一题非常类似;父类与子类中的两个foo函数都各自分别构成重载,父类中int接口的foo函数定义成了虚函数,并在子类中完成了重写;接着我们来看主函数,定义了一个子类并用父类的指针指向该子类;printf函数中,我们第一个传入了一个整型,调用的子类int接口的foo函数,构成了多态;返回2000;第二个传入了字符数组,调用的是父类字符数组那个接口的foo函数,sizeof计算得到4+10,返回14(不知道为啥是4的可以看C语言指针强化);故选C;

四、编程题题解

1、完全数计算

思路:我们依次遍历1到n,记录完全数个数,没什么技巧;

#include <iostream>
using namespace std;

bool is_absolute(int num)
{
    int sum = 0;
    for(int i = 1; i < num; i++)
    {
        if(num % i == 0)
            sum += i;
    }
    if(num == sum)
        return true;
    else
        return false;
}

int main() 
{
    int n;
    cin >> n;
    int count = 0;
    for(int i = 1; i <= n; i++)
    {
        if(is_absolute(i))
            count++;
    }
    cout << count << endl;
    return 0;
}

2、扑克牌大小

思路:本题主要考察string的使用,也没有什么算法,我们先判断是否存在王炸,如果存在直接返回;然后继续筛选,首先我们分别计算得到这两手牌的 第一个张牌、手牌数量;然后用string保存比较次序,然后如果手牌数量相同,直接比较第一张牌再次序表中的位置;如果手牌数量不相同,则看是否有一方有炸弹,如果有返回炸弹一方手牌,没有则返回ERROR;

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

string find_max(string& cards)
{
    if(cards.find("joker JOKER") != string::npos)
        return "joker JOKER";
    // 分离两手牌
    int pos = cards.find('-');
    string play1 = cards.substr(0, pos);
    string play2 = cards.substr(pos + 1);
    // 统计两手牌个数
    int card_num1 = count(play1.begin(), play1.end(), ' ') + 1;
    int card_num2 = count(play2.begin(), play2.end(), ' ') + 1;
    // 统计他两第一张牌
    string card1 = play1.substr(0, play1.find(' '));
    string card2 = play2.substr(0, play2.find(' '));
    // 手牌比较依据数组
    string str = "345678910JQKA2jokerJOKER";
    if(card_num1 == card_num2)
    {
        if(str.find(card1) > str.find(card2))
            return play1;
        else
            return play2;
    }
    else 
    {
        if(card_num1 == 4)
            return play1;
        else if(card_num2 == 4)
            return play2;
        else
            return "ERROR";
    }
}

int main() 
{
    string cards;
    getline(cin, cards);
    cout << find_max(cards) << endl;
    return 0;
}

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

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

相关文章

如何启用路由器dhcp?快解析如何内网穿透?

一、什么是DHCP&#xff1f; 动态主机设置协议&#xff08;DHCP&#xff09;是一种使网络管理员能够集中管理和自动分配 IP 网络地址的通信协议。在网络中&#xff0c;每个联网设备都需要分配独有的 IP 地址。并当有新计算机移到网络中的其它位置时&#xff0c;能自动收到新的…

【阅读笔记】一种暗通道优先的快速自动白平衡算法

解决问题: 自动白平衡算法中存在白色区域检测错误导致白平衡失效的问题,作者提出了一种基于暗通道优先的白平衡算法。 算法思想: 图像中白色区域或者高饱和度区域的光线透射率较低,根据以上特性利用暗通道法计算图像中白色区域。 算法概述: 作者使用何凯明提出的基于暗…

MLP-Mixer:面向视觉的全mlp架构

文章目录 MLP-Mixer: An all-MLP Architecture for Vision摘要本文方法代码实验结果 MLP-Mixer: An all-MLP Architecture for Vision 摘要 卷积神经网络(cnn)是计算机视觉的首选模型。 最近&#xff0c;基于注意力的网络&#xff0c;如VIT&#xff0c;也变得流行起来。在本文…

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码。提供了简单轻量化的部署方式和详细的四种刷题模式教程。该应用使用JSON作为题库的存储方式&#xff0c;层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用&#xff0c;方便将题库从word格式转换为…

Python显示循环代码的进度条

目录 1. tqdm库 2. alive_progress库 3. progressbar库 1. tqdm库 tqdm是一个快速&#xff0c;可扩展的Python进度条&#xff0c;可以在Python长循环中添加一个进度提示信息 import time from tqdm import trangefor i in trange(100):# do somethingtime.sleep(0.5) 2. a…

Mysql原理篇--第一章 1条语句的执行

Mysql原理系列篇 第一章 1条语句的执行 文章目录 Mysql原理系列篇 第一章 1条语句的执行前言&#xff1a;1 连接mysql 服务端:1.1 通信模型&#xff1a;1.2 通信连接数&#xff1a; 2 sql 语句的到达存储引擎的流程:3 数据从存储引擎返回的流程&#xff1a;4 Buffer_pool 脏页的…

【云原生】Docker容器资源限制(CPU/内存/磁盘)

目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容…

【Linux下6818开发板(ARM)】SecureCRT串口和交叉编译工具(巨细版!)

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

策略:一致性行动原则,力出一孔

策略&#xff1a;一致性行动的原则 策略有很多种解释 经常跟战略混淆 趣讲大白话&#xff1a;就是指导方针 【趣讲信息科技238期】 **************************** 教员的游击战“16字口诀”很经典 敌进我退&#xff0c;敌退我进&#xff0c; 敌疲我打&#xff0c;敌驻我扰 曾国…

小城市当程序员好不好?

在职业发展中&#xff0c;小城市和大城市都有各自的机会和挑战。在大城市&#xff0c;C#的应用比例可能相对较低&#xff0c;学习C可能有一定的难度&#xff0c;而学习Java最好有人指导。在小城市&#xff0c;机会相对较少&#xff0c;跳槽的选择也有限。然而&#xff0c;小城市…

想转嵌入式或工控上位机,哪个前途更光明?

上位机开发的需求目前很大&#xff0c;根据BOSS上的数据&#xff0c;C#和WPF的需求较多。作为WPF开发者&#xff0c;薪资水平可以有较大的变动&#xff0c;主要取决于经验&#xff0c;20,000到30,000元的薪资并不难达到。工作环境因工种而异&#xff0c;不可避免地需要进行现场…

消息队列 - 数据库操作

这里写自定义目录标题 前言数据表的插入删除操作关于实现接口类的几个注意实现实现封装创建DataBaseManager 类另一种获取Bean对象的方式 对数据库进行单元测试 前言 上一篇博客, 我们将消息队列的实体类创建完毕了, 并且还写了一些关于数据库的操作, 接下来我们继续进行关于数…

【Spring Cloud Alibaba】Sentinel运行原理

文章目录 前言1、基本原理2、SphU.entry()2.1、StringResourceWrapper2.2、Entry 3、entry.exit()4、Context 前言 本文基于sentinel-1.8.0版本 Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保…

fast segment anything

[论文解读]比sam快50倍的通用视觉模型fastsam(Fast Segment Anything) - 知乎MetaAI提出的能够“分割一切”的视觉基础大模型SAM提供了很好的分割效果&#xff0c;为探索视觉大模型提供了一个新的方向。 虽然sam的效果很好&#xff0c;但由于sam的backbone使用了vit&#xff0c…

Nexus上传jar包到私有Maven仓库的方法: 页面Upload 和命令

Upload和mvn deploy命令两种上传方式的应用场景不同&#xff0c;手动上传适用于工具类的jar包&#xff0c;比如项目需要引入的lib文件&#xff0c;这种可以选择手动上传。复杂的、有较多依赖的jar包则需要连同pom文件一起上传&#xff0c;此时需要使用mvn deploy。 登录Nexus&a…

ESP32 官方AT固件编译(从零开始环境搭建到编译完成全过程)

1、下载VMware免费版 https://download3.vmware.com/software/WKST-PLAYER-1702/VMware-player-full-17.0.2-21581411.exe 2、下载Ubuntu &#xff08;ubuntu-22.04.2-desktop-amd64.iso&#xff09;** https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso…

Redis学习2--使用java操作Redis

1、java操作Redis库的比较 Redis有各种语言的客户端可以来操作redis数据库&#xff0c;其中java语言主要有Jedis与lettuce &#xff0c;Spring Data Redis封装了上边两个客户端&#xff0c;优缺点如下&#xff1a; 2、使用Jedis操作Redis Jedis使用的基本步骤&#xff1a; 引…

python_PyQt5开发工具结构基础

写在前面&#xff1a; 考虑已经陆陆续续在平台写了几篇PyQt5开发的小工具&#xff0c;后续还会继续发布新的新工具&#xff0c;这些工具都基于一个基础结构往上构建&#xff0c;这个基础结构是本人自己开发的习惯&#xff0c;在这里把工具的基础结构代码抽取出来&#xff0c;后…

ARM汇编中预定义的寄存器和协处理器名称

一、是什么? 预定义的寄存器和协处理器名称,汇编代码中直接使用就可以. # 二、使用步骤 1.引入库 代码如下(示例): .global _start _start:mov r0,#0x18LDR R3,=0x55555555mov r1,#0x18LDR R1,=0x55555555mov r2,#

HTML:常用标签归纳(用法 + 代码 + 显示效果)

目录 标签span 文本标签div 竖着布局的标签h1~h6 标题标签p 段落标签a 超链接标签href 资源位置target 打开位置 a 锚点标签固定位置 br 换行标签img 图片标签src 属性altwidth 宽度 height 高度 列表标签ul 无序列表ol 有序标签设置表示顺序 table 表格属性border 边框width 宽…