【选择题】校招笔试选择题第一辑

news2025/1/21 10:20:53

题目

  1. 以下程序的运行结果是( )
#include <stdio.h>
int main(void) {
	printf("%s , %5.3s\n", "computer", "computer");
	return 0;
}

A. computer , puter
B. computer ,   com
C. computer , computer
D. computer , compu.ter

  1. 在32位cpu上选择缺省对齐的情况下,有如下结构体定义:
struct A{
	unsigned a : 19;
	unsigned b : 11;
	unsigned c : 4;
	unsigned d : 29;
	char index;
};

sizeof(struct A)的值为( )

A. 9
B. 12
C. 16
D. 20

  1. 32位系统中,定义**a[3][4],则变量占用内存空间为( )。
    A. 4
    B. 48
    C. 192
    D. 12

  2. 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>
int main(){
	long long a = 1, b = 2, c = 3;
	printf("%d %d %d\n", a, b, c);
	return 0;
}

A.1,2,3
B.1,0,2
C.1,3,2
D.3,2,1

  1. 有以下程序,程序运行后的输出结果是( )
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int m=0123, n=123;
	printf("%o %o\n", m, n);
	return 0;
}

A. 0123 0173
B. 0123 173
C. 123 173
D. 173 173

  1. 定义char dog[]=“wang\0miao”;那么sizeof(dog)与strlen(dog)分别是多少( )
    A. 10,4
    B. 4,4
    C. 9,9
    D. 9,4

  2. 下面两个结构体,在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是( )

struct One{
	double d;
	char c;
	int i;
}
struct Two{
	char c;
	double d;
	int i;
}

A. 16 24,16 24
B. 16 20,16 20
C. 16 16,16 24
D. 16 16,24 24

  1. 有一个类A,其数据成员如下:
class A {
...
private:
	int a;
public:
	const int b;
	float* &c;
	static const char* d;
	static double* e;
};

则构造函数中,成员变量一定要通过初始化列表来初始化的是( )
A. a b c
B. b c
C. b c d e
D. b c d
E. b
F. c

  1. C++ 中,有如下类模板定义:
template<class T>
class BigNumber{
	long n;
public:
	BigNumber(T i) :n(i) {}
	BigNumber operator+(BigNumber b) {
	return BigNumber(n + b.n);
	}
}; 

已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是( )
A. 3+3
B. b1+3
C. b1+b2
D. 3+b1

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

  2. 以下代码共调用多少次拷贝构造函数:( )

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

  1. 在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )
    A. 无操作数的运算符
    B. 二元运算符
    C. 前缀一元运算符
    D. 后缀一元运算符

  2. 在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该( )
    A. 将构造函数设为私有
    B. 将析构函数设为私有
    C. 将构造函数和析构函数均设为私有
    D. 没有办法能做到

  3. print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是( )
    A. const void print();
    B. void const print();
    C. void print() const;
    D. void print(const);

  4. 如果MyClass为一个类,执行”MyClass a[5], *b[6]”语言会自动调用该类构造函数的次数是( )
    A. 2
    B. 5
    C. 4
    D. 9

  5. 以下程序输出是( )

#include <iostream>
using namespace std;
int main(void)
{
	const int a = 10;
	int * p = (int *)(&a);
	*p = 20;
	cout<<"a = "<<a<<", *p = "<<*p<<endl;
	return 0;
}

A. 编译阶段报错运行阶段报错
B. a = 10, *p = 10
C. a = 20, *p = 20
D. a = 10, *p = 20
E. a = 20, *p = 10

  1. 如果有一个类是 myClass , 关于下面代码正确描述的是 ( )
myClass::~myClass(){
	delete this;
	this = NULL;
}

A. 正确,我们避免了内存泄漏
B. 它会导致栈溢出
C. 无法编译通过
D. 这是不正确的,它没有释放任何成员变量。

  1. 请问以下说法,哪个是正确的 ( )
    A. 每个类都有一个无参数的构造函数。
    B. 每个类都有一个拷贝构造的函数。
    C. 每个类能有多个构造函数。
    D. 每个类能有多个析构函数。

  2. C++中关于堆和栈的说法,哪个是错误的 ( )
    A. 堆的大小仅受操作系统的限制,栈的大小一般较小
    B. 在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题
    C. 堆和栈都可以静态分配
    D. 堆和栈都可以动态分配

  3. C++将父类的析构函数定义为虚函数,下列正确的是哪个( )
    A. 释放父类指针时能正确释放子类对象
    B. 释放子类指针时能正确释放父类对象
    C. 这样做是错误的
    D. 以上全错

  4. 分析一下这段程序的输出( )

#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

  1. 有一个类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

  1. 以下程序的输出是( )
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;
}

A. 11
B. 101
C. 12
D. 102

  1. 有如下C++代码:
struct A{
	void foo(){printf("foo");}
	virtual void bar(){printf("bar");}
	A(){bar();}
};
struct B:A{
	void foo(){printf("b_foo");}
	void bar(){printf("b_bar");}
};

那么

A *p = new B;
p->foo();
p->bar();

输出为( )
A. barfoob_bar
B. foobarb_bar
C. barfoob_foo
D. foobarb_fpp

  1. 以下程序输出结果是( )
class A
{
public:
	virtual void func(int val = 1)
	{ std::cout<<"A->"<<val <<std::endl;}
	virtual void test()
	{ func();}
};

class B : public A
{
public:
	void func(int val=0) {std::cout<<"B->"<<val <<std::endl;}
};

int main(int argc ,char* argv[])
{
	B*p = new B;
	p->test();
	return 0;
}

A. A->0
B. B->1
C. A->1
D. B->0

  1. 下面这段代码运行时会出现什么问题?
class A
{
public:
	void f()
	{
		printf("A\n");
	}
};

class B: public A
{
public:
	virtual void f()
	{
		printf("B\n");
	}
};

int main()
{
	A *a = new B;
	a->f();
	delete a;
	return 0;
}
  1. 代码执行后,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

参考答案

  1. B
    %m:ns:其中m表示输出字符串的宽度;n表示左起截取目标字符串 n 个字符进行输出,并且是右对齐,左边补空格。
  2. C
    参考学习C语言结构体【内存对齐】与【实现位段】
  3. B
    a先和方括号结合,a是一个三行四列的二维数组;**是指针类型,32位系统下是4个字节,所以有4 * 12 = 48
  4. B
    小端存储:低位数据存放到低地址处。
    内存中,
    a的存储是:01 00 00 00 00 00 00 00
    b的存储是:02 00 00 00 00 00 00 00
    c的存储是:03 00 00 00 00 00 00 00
    之后调用printf函数,要创建函数栈帧。栈帧的创建是从高地址往低地址创建。
    函数传参压栈是从右向左进行的。
    所以有如下的栈帧情况:
    在这里插入图片描述
    %d打印,是打印4个字节,
    所以第一次打印01 00 00 00,所以第一次打印00 00 00 00,所以第一次打印02 00 00 00
    即1,0,2。
  5. C
    m是八进制数,n是十进制数,%o是按照八进制进行打印。
  6. A
    sizeof计算变量所对应类型占的字节数。
  7. C
    参考C语言结构体【内存对齐】与【实现位段】。
  8. B
    初始化列表只能对类中非静态成员变量进行初始化。
    const修饰的成员变量,引用类型的成员变量,类类型对象且该类没有默认的构造函数,这三种成员必须在初始化列表位置进行初始化。
  9. D
    如果类中具有单个参数的构造函数,该构造函数具有类型转换的作用。编译器在编译代码阶段,会调用单参构造函数进行类型转换。
  10. E
    引用底层是使用指针实现的,引用本质还是指针。
  11. D
  12. C
  13. B
    new的原理是:a.申请空间,b.调用构造函数对申请的空间进行初始化。如果构造函数私有了,就无法new创建对象了。delete的原理:a.调用类的析构函数,b.释放空间。析构函数私有了,会影响对象空间的delete释放。
  14. C
    常成员函数是指const成员函数,此时的const修饰this指针,表示在该成员函数中,不能修改类的非静态成员变量。
  15. B
    MyClass a[5]有是5个MyCLass类型对象的一个数组,需要调用5次MyClass类的构造函数;MyClass* b[6]是一个指针数组,该数组中的每个元素存放的都是MyClass*类型的指针。
  16. D
    C++中cosnt修饰的变量,就相当于一个常量,是具有替换作用的。在编译阶段,会将const修饰的变量替换成常量。
  17. C
    首先,不能在析构函数中delete this
~myClass(){
	delete this;
}

上面代码可以通过编译,但运行会奔溃。
delete this有两个作用,一是调用析构函数释放对象中的资源,二是调用operator delete释放对象的空间。
所以,析构函数中delete this会形成无限递归,导致程序运行栈溢出崩溃。
并不是所有的对象都是从对象new出来的,所以不能一味地delete this
this=NULL编译会失败,要知道this类型是myClass* const的,this指针的指向不能被修改。

  1. C
    类里面也可以没有拷贝构造函数。
  2. C
    堆只能动态分配(运行时决定分配空间的大小),栈静态和动态分配都可以。
  3. A
  4. A
  5. F
    d在类外初始化。
  6. C
  7. A
  8. B
    虚函数接口继承。
  9. 运行时崩溃。子类的虚表指针安放有问题。
  10. A
    头部存放的有虚表指针。

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

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

相关文章

Linux的权限(一)

目录 权限的本质 Linux权限的概念 如何创建与删除普通用户 创建普通用户&#xff1a; 设置用户密码&#xff1a; 删除普通用户&#xff1a; 删除与该用户关联的主目录和邮件目录 &#xff1a; su指令 sudo指令 Linux权限管理 Linux中文件访问者有三种“人” Linux…

分享几个国内免费使用的 gpt 网站

可放心阅读点击&#xff0c;无邀请链接、邀请码等 今天主要分享几个个免费的GPT网站。 1、思默问答&#xff08;SiteSMO&#xff09; AI写作生成器_智能写作_问答助手 - 思默问答 算是国内比较早的AI应用网站&#xff0c;支持问答&#xff0c;画图等&#xff0c;所有的问答…

Pandas时序数据分析实践—基础(1)

目录 1. Pandas基本结构2. Pandas数据类型2.1. 类型概述2.1.1. 整数类型&#xff08;int&#xff09;&#xff1a;2.1.2. 浮点数类型&#xff08;float&#xff09;&#xff1a;2.1.3. 布尔类型&#xff08;bool&#xff09;&#xff1a;2.1.4. 字符串类型&#xff08;object&a…

Java中异常处理顺序和全局异常处理器

异常处理顺序 我们直接通过代码看下Java中异常的处理顺序。 数组越界异常属于运行时异常&#xff0c;被捕捉后就停止了&#xff0c;打印结果为数组越界了。 Test public void test2(){int[] arr new int[4];try{System.out.println(arr[5]);}catch (ArrayIndexOutOfBoundsE…

uniapp 使用安卓模拟器运行

uniapp 启动方式有很多种,这里介绍使用模拟器启动uniapp 要使用模拟器启动uniapp肯定少不了安装模拟器(废话) 这里选着浏览器推荐的第一个模拟器mumu模拟器 下载好了mumu安装包后就是安装了,这个过于小白,就不介绍了 2. 查看模拟器的adb端口号, mumu的adb查看端口号与众不同…

C++-内联函数

目录 一.什么是内联函数 1.内联函数的概念 2.内联函数的定义 二.C中引入内联函数的原因 三.什么样的函数适合被声明为内联呢&#xff1f; 四.面试题 一.什么是内联函数 1.内联函数的概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开…

Python如何优雅地使用重试:tenacity

1 缘起 项目中使用了第三方服务&#xff0c;和上一篇文章一样&#xff1a;SpringBoot中如何优雅地使用重试https://blog.csdn.net/Xin_101/article/details/134617868 在调用第三方服务时&#xff0c;出现第三方服务连接不到的情况&#xff0c;为了保证服务的相对稳定&#xf…

糟了,数据库崩了,又好像没崩

前言 2023 年某一天周末&#xff0c;新手程序员小明因为领导安排的一个活来到公司加班&#xff0c;小明三下五除二&#xff0c;按照领导要求写了一个跑批的数据落库任务在测试环境执行 &#xff0c;突然间公司停电了&#xff0c;小明大惊&#xff0c;“糟了&#xff0c;MySQL …

每天一点python——day84

#每天一点Python——84 #异常处理机制try—except—else #异常处理机制try—except—else如果try块中没有抛出异常&#xff0c;则执行else块&#xff0c;如果try中抛出异常&#xff0c;则执行except块#示例&#xff1a; try:a int(input(请输入第一个整数&#xff1a;))b in…

【JavaEE】多线程(3) -- 线程等待 wait 和 notify

目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐&#xff08;⾯试题&#xff09; 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯…

【ArcGIS Pro微课1000例】0044:深度学习--面部模糊(马赛克)

本文讲解ArcGIS Pro中通过深度学习工具实现人脸面部模糊,起到马赛克的作用。 文章目录 一、效果对比二、工具介绍三、案例实现一、效果对比 原始图片: 深度学习后的模糊照片: 二、工具介绍 本工具为ArcGIS Pro工具箱中的深度学习工具中的:使用深度学习分类像素,如下所示…

ChatGPT 的 18 种玩法,你还不会用吗?

你确定&#xff0c;你会使用 ChatGPT 了吗&#xff1f; 今天给大家整理了 18 种 ChatGPT 的用法&#xff0c;看看有哪些方法是你能得上的。 用之前我们可以打开R5Ai平台&#xff0c;可以免费使用目前所有的大模型 地址&#xff1a;R5Ai.com 语法更正 用途&#xff1a;文章…

ER图是什么,怎么画?

ER图&#xff08;Entity-Relationship Diagram&#xff09;是一种用于描述实体间关系的图形化表示方法。它主要用于数据库设计&#xff0c;可以清晰地展示实体、属性和实体间的联系。常用的ER图类型包括&#xff1a; 实体-关系模型&#xff08;Entity-Relationship Model&…

Shutdown Signal: channel error; protocol method: #method<channel.close>

完整异常信息&#xff1a; Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no exchange fanoutExchange in vhost /, class-id60, method-id40) 意思是找不到名字是 fanoutExchange 的虚拟机 就是虚拟机…

基于SSH三大框架的员工管理系统

基于SSH三大框架的员工管理系统 摘要 本系统为本人学习SSH三大框架时所做的整合实例&#xff0c;系统角色包括普通用户和管理员两种&#xff0c;首页有管理员登录入口链接。系统功能主要包括管理员对用户的基本增、删、改、查和分页显示用户信息等。 系统环境 本系统使用ec…

Gossip 协议

Gossip 协议 背景 在分布式系统中&#xff0c;不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息&#xff0c;简单来说就是一个主节点同时共享最新信息给其他所有节点&#xff0c;比较适合中心化系统。这种方法的缺陷也很明显&…

App测试之App日志收集及adb常用命令

文章目录 前言一、adb是什么1.APP测试收集手机日志常用的工具2.adb下载与安装3.ADT/SDK/ADB是什么4.adb连接真机 二、adb常用命令三、android系统日志文件1.logcat日志文件2.logcat日志文件分析 四、分析crash & ANR 日志1.发生crash如何分析2.发生ANR如何分析 总结扩展&am…

队列顺序存储(详解)

队列是一种常见的数据结构&#xff0c;它是一种先进先出&#xff08;First-In-First-Out, FIFO&#xff09;的线性表。在队列中&#xff0c;数据元素按照插入的顺序排列&#xff0c;最先插入的元素在队列的前面&#xff0c;最后插入的元素在队列的后面。类比生活中排队购物的情…

登录界面(flex布局练习)

练习&#xff1a;登录界面在我们网页制作的过程中经常遇见&#xff0c;所以请你编写一个界面联系一下&#xff0c;这个可以增加一些动画或者是其他的效果&#xff0c;当然越帅越好。请使用flex或者其他布局练习 例如&#xff1a; 代码 <!DOCTYPE html> <html lang…

如何做好小红书?9条小红书运营起号心得(必读)

关于小红书运营细节和方法&#xff0c;总结了以下9条起号心得&#xff0c;希望给近期新手们一些经验借鉴。 一、出现一条爆文后的策略当账号新发的一篇笔记流量起飞了&#xff0c;不要急于发布新内容。先让爆文的流量消耗殆尽&#xff0c;等流量开始减少时再发布新笔记。同时&…