【C++】【自用】选择题 刷题总结
文章目录
- 【类和对象】
- 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
- 初始化列表只能对类中 非静态 的成员变量进行初始化。
- 初始化列表种才是真的初始化,在构造函数的函数体中的是赋值。
- 三种 必须要在初始化列表中初始化 的成员变量:
- 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 ×
- 成员函数的第一个参数其实是 隐藏的 this 指针。
- 如果类中有 单个参数 的构造函数,该构造函数具有 类型转换 的作用。
解析:
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 个。不过,这是错误的使用方法,很可能导致内存泄漏等问题。
- 三种堆上申请内存的方法:
-
- malloc/calloc/realloc—>free
-
- new / delete
-
- new[] / delete[]
- 一定要匹配起来使用,否则程序可能会产生内存泄漏或者程序可能会崩溃
相关文章:

【C++】【自用】选择题 刷题总结
文章目录 【类和对象】1. 构造、拷贝构造的调用2. 静态成员变量3. 初始化列表4. 成员函数:运算符重载5. 友元函数、友元类55. 特殊类设计 【细节题】1. 构造 析构 new \ deletet、new[] \ delete[] 【类和对象】 1. 构造、拷贝构造的调用 #include using namespace…...
SkyWalking链路追踪-Collector(收集器)
Collector(收集器) SkyWalking的Collector(收集器)是SkyWalking链路追踪的核心组件之一。它负责接收来自各个Agent的追踪数据,并将其存储到数据存储器(如数据库)中。具体来说,Colle…...

typescript自动编译文件实时更新
npm install -g typescripttsc --init 生成tsconfig.json配置文件 tsc -w 在监听模式下运行,当文件发生改变的时候自动编译...

qt6.5 download for kali/ubuntu ,windows (以及配置选项选择)
download and sign in qt官网 sign in onlion Install 1 2 3 4 5...
【JS 原型链】
JavaScript 原型链是一个重要的概念,它是 JavaScript 语言实现面向对象编程的核心。在 JavaScript 中,每个对象都有一个与之关联的原型,并且该对象继承了原型中的属性和方法。这些原型组成了一个原型链,可以通过该链追溯到顶层的 …...
harmonyOS 开发之UI开发(ArkTS声明式开发范式)概述
UI开发(ArkTS声明式开发范式)概述 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建OpenHarmony应用UI所必需的能力,主要包括: ArkTS ArkTS是UI开发语言ÿ…...

【人工智能】神经网络、M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价
M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 文章目录 M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义M-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵(Cross Entropy)…...

小程序新渲染引擎 Skyline 发布正式版
为了进一步提升小程序的渲染性能和体验,我们推出了一套新渲染引擎 Skyline,现在,跟随着基础库 3.0.0 发布 Skyline 正式版。 我们知道,小程序一直用 WebView 来渲染界面,因其有不错的兼容性和丰富的特性,且…...

网络安全作业1
URL编码 当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符。 安全字符,指的是没有特殊用途或者特殊意义的…...

【NLP】视觉变压器与卷积神经网络
一、说明 本篇是 变压器因其计算效率和可扩展性而成为NLP的首选模型。在计算机视觉中,卷积神经网络(CNN)架构仍然占主导地位,但一些研究人员已经尝试将CNN与自我注意相结合。作者尝试将标准变压器直接应用于图像,发现在…...

【redis】通过配置文件简述redis的rdb和aof
redis的持久化方式有2种,rdb,即通过快照的方式将全量数据以二进制记录在磁盘中,aof,仅追加文件,将增量的写命令追加在aof文件中。在恢复的时候,rdb要更快,但是会丢失一部分数据。aof丢失数据极少…...
Cypress 上传 pdf 变空白页问题
在使用cypress 上传文件时,上传正常,但是,pdf一直空白的,翻边了资料也没找到原因。最后在一个不起眼的地方发现了问题所在。 错误的代码: cy.fixture(CBKS.pdf).as(uploadFile)cy.get(.el-upload-dragger).selectFile…...

【ArcGIS Pro二次开发】(52):布局导出图片(批量)
在ArcGIS Pro中设定好布局后,可以直接导出为各种类型的图片。 这是很基本的功能,但是如果你的布局很多,一张一张导图就有点费劲。 之前有网友提出希望可以批量导图,要实现起来并不难,于是就做了这个工具。 一、要实现…...
Git拉取远程分支并创建本地分支
一、查看远程分支 使用如下git命令查看所有远程分支: git branch -r 查看远程和本地所有分支: git branch -a 查看本地分支: git branch 在输出结果中,前面带* 的是当前分支。 二、拉取远程分支并创建本地分支 方法一 使用…...

OSI七层模型——物理层
OSI模型的物理层位于协议栈的底部。它是 TCP/IP 模型的网络接入层的一部分。如果没有物理层,就没有网络。本模块详细介绍了连接到物理层的三种方法。 1 物理层的用途 1.1 物理连接 不管是在家连接本地打印机还是将其连接到另一国家/地区的网站上,在进…...
【NLP】使用变压器(tranformer)和自动编码器
一、说明 自然语言处理 (NLP)中,trnsformer和编码器是至关重要的概念;本篇不是探讨原理,而是讲现实中,如何调用和使用transformer以及encoder,注意。本文中有时出现“变压器”,那是transormer的同义词,在此事先声明。 二、NLP及其重要性的简要概述 NLP是人工…...

广州华锐互动:水利数字孪生智能管理系统的特色
水利数字孪生智能管理系统是一种基于数字孪生的新型水利管理工具,它通过将现实世界中的水利设施和设备数字化,并在虚拟环境中进行模拟和分析,为水利管理者提供更加直观、精准的决策支持。该系统具有以下亮点: 首先,水利…...
php使用chatGPT生成一些东西做一个记录
好久没写了,这么长时间都去坐一些自己感兴趣的事情去了。 之前使用chatgpt-3,效果一直不咋好,这里我们来说说各个版本区别 gpt-3收费成本可以接受,生成的内容对话有点不太聪明的样子 git-3.5-turbo收费相对来说低,生成文本质量…...

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!
ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具,采用拖拽式设计模式,不需任何服务器和组件支持,即可在 Mac、Linux 和 Windows 操作系统中,设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…...

听GPT 讲K8s源代码--pkg(七)
k8s项目中 pkg/kubelet/config,pkg/kubelet/configmap,pkg/kubelet/container,pkg/kubelet/cri 这几个目录处理与 kubelet 配置、ConfigMap、容器管理和容器运行时交互相关的功能。它们共同构成了 kubelet 的核心功能,使其能够在 …...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...