【C++】【自用】选择题 刷题总结

news2024/11/14 20:16:37

文章目录

  • 【类和对象】
      • 1. 构造、拷贝构造的调用
      • 2. 静态成员变量
      • 3. 初始化列表
      • 4. 成员函数:运算符重载
      • 5. 友元函数、友元类
      • 55. 特殊类设计
  • 【细节题】
      • 1. 构造 析构 + new \ deletet、new[] \ delete[]


【类和对象】


1. 构造、拷贝构造的调用

#include
using namespace std;
class MyClass{
public:
  MyClass(int i=0){cout<<1;}
  MyClass(const MyClass&x){cout<<2;}
  MyClass& operator=(const MyClass&x){cout<<3; return*this;}
  ~MyClass(){cout<<4;}
};
int main(){
  MyClass obj1(1),obj2(2),obj3(obj1);
  return 0;
}

如上程序,运行时的输出结果是()
A. 121,444
B. 112,444 √
C. 11,114,444
D. 11,314,445
E. 11,314,444

2. 静态成员变量

下列静态数据成员的特性中,错误的是()
A. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域符号
B. 说明静态数据成员时前边要加关键字static来修饰
C. 静态数据成员在类体外进行初始化
D. 静态数据成员不是所有对象所共有的 ×

静态成员变量:
  • 所有对象共享的,并不属于具体的某个对象
  • 定义和声明方式:在类中声明,然后需要在类外单独进行定义,一定不能在构造函数初始化列表的位置初始化(有一个例外,const static,紧接在后面说明)
  • 类外访问对象.静态成员变量 or 类名::静态成员变量

下面有关c++静态数据成员,说法正确的是()
A. 不能在类内初始化
B. 不能被类的对象调用
C. 不能受private修饰符的作用
D. 可以直接用类名调用 √

// const static 的成员变量是可以在类中定义的
class A
{
private:
	const static int a = 10;	// 编译通过
	//static int b = 20;		// err..编译报错
	static int b;
};
A::b = 20;						// 普通的静态成员变量这样写才行

3. 初始化列表

有一个类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. 初始化列表只能对类中 非静态 的成员变量进行初始化。
  2. 初始化列表种才是真的初始化,在构造函数的函数体中的是赋值。
三种 必须要在初始化列表中初始化 的成员变量:
const 成员变量
引用 成员变量
自定义类型 成员(且该类 没有默认构造函数,即 没有无参的构造函数 时)

4. 成员函数:运算符重载

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

解析: 每个非静态的成员函数都有一个隐藏的 this 指针。前缀和后缀的举例如下。

// 前缀 ++
Date& operator++()
// 后缀 ++
Date& operator++(int)

补充代码:
在这里插入图片描述

C++ 中,有如下类模板定义:

template 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. 成员函数的第一个参数其实是 隐藏的 this 指针。
  2. 如果类中有 单个参数 的构造函数,该构造函数具有 类型转换 的作用。

解析:
A. 是一个普通的加号连接两个整型的表达式,正确。
B. 首先,第一个参数为 this 指针类型的 BigNumber 对象,满足。其次,BigNumber 类中有单参数构造函数,而 3 恰好是整型可以作为构造函数的参数,编译器在编译代码时,会调用但参构造函数将 3 转化为 BigNumber 的对象。两个对象相加,正确。
C. 标准的两个对象相加,正确。
D. 由于隐藏的 this 指针的存在要求 + 号前面的操作数,是 BigNumber 类型的对象,3 不满足,故错误。

5. 友元函数、友元类

下面有关友元函数与成员函数的区别,描述错误的是?
A. 友元函数可以让本类和友元类对象调用
B. 友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数
C. 类的成员函数是属于类的,调用的时候是通过指针this调用的
D. 友元函数是有关键字friend修饰,调用的时候也是通过指针this调用的 ×

友元函数:不是类的成员函数,更不会有 this 指针,但是在友元函数中可以访问类中私有的成员。

成员函数:具有隐藏的 this 指针,受访问限定符的约束,通过对象来调用




55. 特殊类设计

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

经典特殊类总结:

只能创建一个对象的类(单例模式:饿汉模式和懒汉模式)
饿汉模式:利用 静态成员变量,一开始(在 main 函数之前) 就创建对象
懒汉模式:类在 第一次访问 实例对象 时创建
不能被拷贝的类
=delete 拷贝构造函数 以及 赋值运算符重载
只能在堆上创建对象的类
思路1: 析构 函数设成私有,普通对象就不给创建了,同时建立一个公共函数包装析构函数,需要析构的时候显示调用该函数。
思路2: 构造 函数设成私有,并提供一个在堆上创建对象的接口,还需要 delete 掉拷贝和赋值。(不推荐)
只能在栈上创建对象的类
构造 函数设为私有,并提供一个在栈上创建对象的接口
不能被继承的类
C++98: 构造 函数设成私有
C++11: final

【细节题】


1. 构造 析构 + new \ deletet、new[] \ delete[]

ClassA *pclassa=new ClassA[5];
delete pclassa;

C++语言中,类ClassA的构造函数和析构函数的执行次数分别为()
A. 5,1 √
B. 1,1
C. 5,5
D. 1,5

解析:本题使用的 new[],并没有配合 delete[] 使用,而是使用了 delete。也就是 new 了 5 个数据,只析构了 1 个。不过,这是错误的使用方法,很可能导致内存泄漏等问题。

三种堆上申请内存的方法:
  1. malloc/calloc/realloc—>free
  1. new / delete
  1. new[] / delete[]
一定要匹配起来使用,否则程序可能会产生内存泄漏或者程序可能会崩溃

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

大数据面试题:超详细版MapReduce工作原理

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; MapReduce详细流程&#xff1a; 1、准备待处理文件&#xff08;200M&#xff09; 2、submit()对原始文件进行切片分析&#…

热点活动-秒杀功能设计

一、需求描述 秒杀活动是电子商务兴起后出现的一种新型的购物方式&#xff0c;通过网上APP、小程序等平台推出一些低于市场价格的商品&#xff0c;提升购买率的营销活动&#xff0c;所有买家在同一时间网上抢购的一种销售方式。对比其他的营销活动&#xff0c;秒杀限时性更强&…

地平线J5芯片部署参考算法(2023.07.27)

本文主要是记录地平线官方提供的可在J5芯片上部署的参考算法。 参考算法数据集FPSPointPillarsKITTI116 (双核)CenterPointNuscenes98.72&#xff08;双核&#xff09;FCOS3DNuscenes589 (双核)GANetCULane2431&#xff08;双核&#xff09;Swin TransformerImageNet133&#…

网络加速技巧

某APP限制网速&#xff0c;可以这么做&#xff1a; &#xff08;1&#xff09;把网络禁用 &#xff08;2&#xff09;在APP的设置里面&#xff0c;把优化速率打开 &#xff08;3&#xff09;启用网络 2023年7月27日亲测有用&#xff0c;开启优化速率之前是100k/s&#xff0c;开…

机器学习---混淆矩阵代码

1. 导包&#xff1a; import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.svm import SVC …

共用体类型

共用体&#xff08;union&#xff09;是一种成员共享存储空间的结构体类型。 union 共用体类型名 {成员列表 } 共用体内存长度是所有成员内存长度的最大值。 #include <iostream> using namespace std;int main() {//先声明共用体类型再定义共用体对象 union A {int m,…

11-2_Qt 5.9 C++开发指南_QSqlQueryModel的使用(QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据)

文章目录 1 QSqlQueryModel 功能概述2 使用 QSqlQueryModel 实现数据查询2.1 实例功能2.2 可视化UI设计2.3 主窗口类定义&#xff08;去除自动生成的槽函数&#xff09;2.4 打开数据库2.5 记录移动 1 QSqlQueryModel 功能概述 从下图中可以看到&#xff0c;QSqlQueryModel 是 …

代码随想录算法训练营day13 | 239. 滑动窗口最大值,347. 前 K 个高频元素

239. 滑动窗口最大值 目录 239. 滑动窗口最大值 347. 前 K 个高频元素 239. 滑动窗口最大值 难度&#xff1a;hard 类型&#xff1a;队列&#xff0c;单调队列&#xff0c;滑动窗口 思路&#xff1a; 构造单调队列&#xff0c;维护大小为k的队列。队列里的元素始终是单调递…

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded

目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted&#xff08;默认设置&#xff09; 解决方法 以管理员身份运行 PowerShell&#xff1a;右键…

AICodeConvert网站,可以用AI把代码从一种语言转换为另一种语言实现,代码开源了,从 6.24 到现在一个月, 没有主动推广,居然9.8K 访问量

这是我一个之前周六 6.24 开始验证思路的项目&#xff0c;验证的感觉差不多&#xff0c;不做主动推广到现在一个月&#xff0c;访问量 9.8K 。 源码开源了&#xff0c;github.com 网址&#xff1a;AICodeConvert 另一个在佛系验证中的还有这个&#xff1a;Base64.kr&#xf…

gedit更改字体大小颜色、行号、更改各种属性

最近在linux&#xff08;CentOS&#xff09;中运行gedit时发现&#xff1a; 如果用普通用户运行&#xff0c;不会报错&#xff0c;但是不会出现Preferences &#xff08;首选项&#xff09;等选项&#xff0c;不能进行基本属性参数的更改&#xff1b;如果采用su、sudo 运行则会…

机器学习之十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…

云原生架构的定义

前言&#xff1a; 从技术的角度&#xff0c;云原生架构是基于云原生技术的一组架构原则和设计模式的集合&#xff0c;旨在将云应用中非业务代码的部分进行最大化的剥离&#xff0c;从而让云设施接管应用中原有的大量非功能特性&#xff08;如弹性、韧性、安全、可观测性、灰度…

MySQL中锁的简介——全局锁

1.锁的概述及分类 2.全局锁的介绍 给数据库加全局锁&#xff1a; flush tables with read lock;数据备份&#xff1a; mysqldump备份指令 root用户名 1234 密码 itcast数据库名称 itcast.sql备份文件名称 mysqldump -uroot -p1234 itcast >itcast.sql;数据库全局锁解锁&am…

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

【高级数据结构】线段树

目录 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 线段树1&#xff08;区间修改&#xff0c;区间查询&#xff09; 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 洛谷&#xff1a;最大数https://www.luogu.com.cn/problem/P1198 题目描述 …

11-3_Qt 5.9 C++开发指南_QSqlQuery的使用(QSqlQuery 是能执行任意 SQL 语句的类)

文章目录 1. QSqlQuery基本用法2. QSqlQueryModel和QSqlQuery联合使用2.1 可视化UI设计框架2.1.1主窗口的可视化UI设计框架2.1.2 对话框的可视化UI设计框架 2.2 数据表显示2.3 编辑记录对话框2.4 编辑记录2.5 插入记录2.6 删除记录2.7 记录遍历2.8 程序框架及源码2.8.1 程序整体…

unity关于匀速移动某些值的方法

可能很多人会用到Verctor3.Lerp、Mathf.LerpUnclamped等等 这种其实不是匀速 看一下这个整体差不多的逻辑 public static float Lerp(float a, float b, float t){return a (b - a) * t;};这个逻辑就是&#xff0c;从a值到b值&#xff0c;返回一个a值加&#xff08;b值-a值&…

msvcp140.dll丢失怎么办?(详细解决方法)

1.msvcp140.dll有什么用&#xff1f; 运行C程序&#xff1a;msvcp140.dll文件包含了许多C程序所需的函数和资源&#xff0c;使得C程序能够在计算机上正确运行。 提供运行时库&#xff1a;msvcp140.dll文件包含了C程序在运行时所需的库文件&#xff0c;如输入/输出操作、内存管…