当前位置: 首页 > news >正文

C++每日选择题—Day1

第一题

以下C++代码会输出什么?

#include <iostream>
using namespace std;
class A 
{
public:A() {}~A() {}
private:static int a;
};
int main() {cout << sizeof(A) << endl;return 0;
}

A:0

B:1

C:4

D:8

答案及解析 B

首先,成员函数不存在于实例化对象 中,其次static定义的静态成员变量不属于任何一个对象,是属于整个类的,也不存在实例化对象中。所以这个类其实啥都没有,记住,什么都没有存的类是默认一个字节的,所以选择B

相关博客:C/C++内存对齐规则(结构体、联合体、类)-CSDN博客

第二题

不考虑任何编译器优化(如:NRVO),下述代码第10行会发生()

#include <stdio.h>
class B
{};
B func(const B& rhs)
{return rhs;
}
int main()
{B b1, b2;b2 = func(b1);  //10
}

A:一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B:二次拷贝构造函数,一次析构函数

C:一次(拷贝赋值运算符)operator=,一次析构函数

D:一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

答案及解析 D

注意说的是第十行,所以不用考虑B b1,b2;

而第十行,首先是调用函数func,由于是引用传参,不需要拷贝构造,但是在返回值这里需要拷贝一个临时变量tmp,用临时变量tmp来返回,所以b2 = tmp;所以这里就是调用的赋值运算符重载函数,然后tmp调用析构函数,因为这个临时变量他tmp完成它的任务来,就会被销毁;

第三题

3. 在32位系统中,关于下面程序说法正确的是()

class Item 
{
private:char *desc;int storage;
public:Item()
{desc = new char[51];}void setInfo(char *dsrc, int num) 
{strcpy(desc,dsrc);   storage = num;}
};int main() 
{Item stock;   stock.setInfo("pen",20);return 0;
}

A:main函数定义了一个stock对象占8个字节

B:storage和desc成员各占4个字节

C:存在内存泄漏的问题

D:存在编译错误

答案及解析 ABC

A:stock是Item这个类的实例化对象,占了8个字节,指针在32位机器上是4字节,int是4字节,通过内存对齐,为8字节; 不懂的可以看这篇博客: C/C++内存对齐规则(结构体、联合体、类)-CSDN博客B​​​​​​​B
B:正确,int类型4字节,32位的指针类型为4字节
C:存在内存泄漏,因为我们在构造函数这里开辟了空间,没有释放
D:不存在编译错误

第四题

4. 对静态成员的正确描述是()?

A:静态数据成员要在类外定义和初始化

B:非静态成员函数也可以操作静态数据成员

C:全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区

D:调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针

答案及解析  B C

A:静态成员变量,在类里面声明,在类外面定义;

B:因为静态成员变量,是属于整个类的,所以并不需要this指针,非静态成员函数可以不使用this指针直接用静态成员变量;

C:全局变量,静态变量存在静态区,局部变量存在栈;

D:静态成员函数是没有this指针的,因为也是属于整个类的;

第五题

5. 以下程序打印的两个字符分别是()

#include<stdio.h>
#include<iostream>
using namespace std;
struct object 
{char data[3];
};int main() 
{object obj_array[3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'}};object *cur = obj_array;printf("%c %c\n", *(char *)((char *)(cur) + 2), *(char *)(cur + 2));return 0;
}

A:c g

B:b d

C:g g

D:g c

答案及解析 A

本题是考查对指针的加整数的考查;

obj_array[3] 这个是存放的字符串的结构体数组,数组每个元素都是字符串;

我们用cur指针指向这个结构体数组的首元素;

我们(char*)cur 是强制类型转换成char类型,目的就是在+2的时候,移动的是两个字节;

所以移动到c位置,(char*) 再强制类型转换一下,是为了解引用的时候取的也是一个char类型,所以就是c,下一个同理;

用图表示:

http://www.lryc.cn/news/240791.html

相关文章:

  • 【实用】mysql配置 及将线上数据导入本地 问题解决及记录
  • 如何下载OpenJDK及其源码
  • [Android]使用Retrofit进行网络请求
  • OpenGL 绘制圆形平面(Qt)
  • JAVA系列---Servlet详解
  • 机器人制作开源方案 | 钻孔植树一体化沙漠车
  • OmniGraffle
  • 【C++上层应用】4. 多线程
  • 【uni-app】uniapp中弹出输入框的示例
  • 通过bat脚本控制Oracle服务启动停止
  • GB28181学习(十七)——基于jrtplib实现tcp被动和主动发流
  • RealSense深度相机在Ubuntu18.04的ros环境下,保存同一时刻下深度图像和彩色图像
  • vue3 ref和reactive使用watch属性的方法和区别
  • YOLO目标检测——卫星遥感舰船检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
  • org.Hs.eg.db使用--持续修改
  • C# Onnx 百度PaddleSeg发布的实时人像抠图PP-MattingV2
  • linux shell操作 - 04 进程间通信
  • 【Java并发】聊聊线程池原理以及实际应用
  • 自然语言处理常用方法和评价指标
  • FFmpeg常用命令行讲解及实战一
  • Java的ArrayList中关于删除的常用操作及方法
  • 低成本打造便携式无线网络攻防学习环境
  • Qt|QLabel显示刷新图像数据
  • Java类加载那些事
  • QSplitter分裂器
  • pgsql 时区查看和修改
  • el-table 表格表头、单元格、滚动条样式修改
  • dockerDesktop使用方法
  • [Ubuntu]RT810xE--网线已拔出--问题解决
  • 美国DDoS服务器:如何保护你的网站免遭攻击?