【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

  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[]
一定要匹配起来使用,否则程序可能会产生内存泄漏或者程序可能会崩溃

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块&#xff0c;对大量长时间序列的栅格遥感影像文件&#xff0c;绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图&#xff08;https://blog.csdn.net/z…

C++,类和对象-多态,制作饮品

#include<iostream> using namespace std;//多态案例&#xff0c;制作饮品class AbstractDrinking { public://煮水virtual void Boil() 0;//冲泡virtual void Brew() 0;//倒入茶杯virtual void PourInCup() 0;//加入辅料virtual void PutSomething() 0;//制作饮品vo…

Codeforces Round 886 (Div. 4)F题解

文章目录 [We Were Both Children](https://codeforces.com/contest/1850/problem/F)问题建模问题分析1.分析到达的点与跳跃距离的关系2.方法1倍数法累计每个点所能达到的青蛙数代码 方法2试除法累计每个点能到达的青蛙数代码 We Were Both Children 问题建模 给定n个青蛙每次…

文本预处理——文本数据分析

目录 文本数据分析中文酒店评价语料获得训练集和验证集的标签数量分布获取训练集和验证集的句子长度分布获取训练集和验证集的正负样本长度散点分布获得训练集和验证集不同词汇总数统计获得训练集上正负的样本的高频形容词词云获得验证集上正负的样本的形容词词云 文本数据分析…

【Java】Spring关于Bean的存和取、Spring的执行流程以及Bean的作用域和生命周期

Spring项目的创建普通的存和取存储Bean创建Bean将Bean注册到容器中 获取并使用Bean获取Spring上下文获取并使用 更简单的存和取存储Bean配置扫描路径添加注解类注解Bean的命名规则五大注解的区别方法注解Bean方法注解要配合类注解使用重命名 Bean有参数的方法 获取Bean属性注入…

Redis三种模式——主从复制,哨兵模式,集群

目录 一、主从复制 1.1主从复制的概念 1.2Redis主从复制作用 1.2.1数据冗余 1.2.2故障恢复 1.2.3负载均衡 1.2.4高可用基石 1.3Redis主从复制流程 1.4部署Redis 主从复制 1.4.1.环境部署 1.4.2.所有服务器都先关闭防火墙 1.4.3.所有服务器都安装Redis 1.4.4修改Master主节点R…

【C#】微软的Roslyn 是个啥?

一、说明 Roslyn 是微软重写的C#编译器并开源。 Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。以下是它如何在过去十年企业Microsoft的最黑暗中开始&#xff0c;并成为所有C#&#xff08;和VB&#xff09;的开源&#xff0c;跨平台&#xff0c;公共语言引擎&#xff0c…

el-upload上传图片和视频,支持预览和删除

话不多说&#xff0c; 直接上代码&#xff1a; 视图层&#xff1a; <div class"contentDetail"><div class"contentItem"><div style"margin-top:5px;" class"label csAttachment">客服上传图片:</div><el…

教育新花样?看智慧教育如何出“花样”

智慧教育是物联化、智能化、感知化、泛在化的新型教育形态和教育模式。数字孪生可视化作为智慧教育的应用之一&#xff0c;优化了教育发展形态。本文以智慧教育浙江大学项目为例&#xff0c;介绍智慧教育的具体应用场景。 一、项目背景 &#xff08;一&#xff09;政策背景 …

springboot自动装配

SPI spi &#xff1a; service provider interface &#xff1a; 是java的一种服务提供机制&#xff0c;spi 允许开发者在不修改代码的情况下&#xff0c;为某个接口提供实现类&#xff0c;来扩展应用程序 将实现类独立到配置文件中&#xff0c;通过配置文件控制导入&#xff…

基于Ko-time的Springboot单体化调用链追踪实践

目录 前言 一、关于Ko-Time 1、是什么&#xff1f; 2、ko-time更新时间线 二、Ko-time怎么用&#xff1f; 1、依赖引入 2、配置集成 3、权限放行 三、链路追踪 1、系统运行 2、链路追踪 3、长时间调用模拟 总结 前言 熟悉微服务的老司机一定了解&#xff0c;在微服务模…

【C++】特殊类的设计 | 类型转换

文章目录 1. 特殊类的设计单例模式饿汉模式具体代码 懒汉模式具体代码 懒汉模式和饿汉模式的优缺点 2. C的类型转换C语言的类型转换C的类型转换static_castreinterpret_castconst_castdynamic_cast 1. 特殊类的设计 单例模式 设计模式是 被反复使用 多数人知晓 经过分类的、代…

React之生命周期

React之生命周期 旧版本&#xff0c;函数组件是没有生命周期的。新版本中通过useEffect触发函数的生命周期 一、基于类组件的生命周期 React的组件生命周期分为挂载阶段、更新阶段和销毁阶段。因为React的state不具有Vue的响应式&#xff0c;所以并没有create阶段 1、挂载阶段&…

第八章:list类

系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类&#xff0c;可以在常数范围内在任意位置进行插入和删除的序列式容器。 …

专访伊士曼中国区高管赵志伟:以创新应对新能源汽车后市场变化

受访人&#xff1a;伊士曼高性能膜事业部中国区商务总监赵志伟 新能源汽车发展至规模化阶段&#xff0c;以贴膜、保养维修为主的后市场产业迎来快速崛起&#xff0c;新能源消费者在汽车贴膜、改装和养护领域也表现出比燃油车更高频的需求度。 作为一家全球特种材料公司&#x…

MySQL~DQL查询语句

一、DQL:查询语句 1、排序查询 语法&#xff1a; order by 子句 ​ order by 排序字段1 排序方式1 &#xff0c;排序字段2 排序方2... 排序方式&#xff1a; ASC&#xff1a;升序[默认] DESC&#xff1a;降序 在SQL语句中永远排序最后 注&#xff1a; 如果有多个排序条…

立创EDA学习

学习树莓派3B的板子发现有个扩展板比较好&#xff0c;自己最好画一个&#xff0c;反正免费。 学习视频&#xff1a;立创EDA&#xff08;专业版&#xff09;电路设计与制作快速入门。 下载专业版&#xff0c;并激活。【分专业版和标准版&#xff0c;专业版也是免费的】 手机…

学习自动化测试该怎么学?6个步骤轻松拿捏

自动化测试作为脱离手工测试的基本核心内容&#xff0c;其重要性不言而喻了&#xff0c;而且我们来看近期大厂的一些招聘信息显示&#xff0c;基本上自动化测试是必备前提&#xff0c;没有这个基本就不用谈后面的问题了&#xff0c;下面我们通过联想集团的一个软件测试工程师的…

购物车功能实现(小兔鲜儿)【Vue3】

购物车 流程梳理和本地加入购物车实现 购物车业务逻辑梳理拆解 整个购物车的实现分为两个大分支, 本地购物车操作和接口购物车操作由于购物车数据的特殊性,采取Pinia管理购物车列表数据并添加持久化缓存 本地购物车 - 加入购物车实现 添加购物车 基础思想&#xff1a;如果…

Ceph社区上游正式合入openEuler原生支持,并通过CI持续验证

作为覆盖全场景应用、支持多样性算力的面向数字基础设施的开源操作系统&#xff0c;openEuler始终遵循“上游优先”的策略&#xff0c;帮助上游开源软件原生支持openEuler&#xff0c;让openEuler系操作系统的用户可以在开发、集成、使用这些开源软件或基于这些开源软件的产品和…