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

【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

一、类的声明和使用

1. 类的声明基础

2. 类的访问控制

3. 类的使用

二、类的声明和对象的声明

1. 类声明中的函数定义

2. 对象声明的多种方式

三、构造函数和析构函数的执行过程

1. 构造函数

2. 析构函数

实验步骤

测试说明

通关代码

测试结果


任务描述

本关任务:声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。

相关知识

为了完成本关任务,你需要掌握:

  1. 类的声明和使用。
  2. 类的声明和对象的声明。
  3. 构造函数和析构函数的执行。

一、类的声明和使用

1. 类的声明基础
  • 在 C++ 中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下:
class MyClass {
public:int myVariable;void myFunction() {// 函数体,这里可以对数据成员进行操作myVariable = 10;}
};
  • 在这个例子中,MyClass是类名,myVariable是数据成员,myFunction是成员函数。public关键字表示这些成员可以在类的外部访问。
2. 类的访问控制
  • 除了public,还有privateprotected访问控制符。private成员只能在类的内部访问,protected成员可以在类内部和派生类(继承关系中的子类)中访问。例如:
class MyClass {
private:int privateVariable;
protected:int protectedVariable;
public:int publicVariable;void accessMembers() {privateVariable = 1;  // 在类内部可以访问private成员protectedVariable = 2;publicVariable = 3;}
};
3. 类的使用
  • 声明了类之后,可以通过创建对象来使用它。对象是类的一个实例,占用内存空间并存储类的数据成员的值。创建对象的语法如下:
MyClass object;
  • 这里objectMyClass类的一个对象。可以通过对象访问类的成员,如:
object.publicVariable = 5;
object.myFunction();

二、类的声明和对象的声明

1. 类声明中的函数定义
  • 成员函数可以在类内部定义,也可以在类外部定义。如果在类外部定义,需要使用作用域解析运算符::来指定函数所属的类。例如:
class MyClass {
public:int myVariable;void myFunction();
};
void MyClass::myFunction() {myVariable = 20;
}
2. 对象声明的多种方式
  • 在栈上声明对象:这是最常见的方式,对象的内存由编译器自动分配和释放。例如:
MyClass stackObject;
  • 在堆上声明对象:使用new关键字在堆上动态分配内存来创建对象。这种方式需要手动释放内存,使用delete关键字。例如:
MyClass* heapObject = new MyClass;
// 使用对象
delete heapObject;
  • 对象数组声明:可以声明对象数组,例如:
MyClass arrayOfObjects[5];

三、构造函数和析构函数的执行过程

1. 构造函数
  • 构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。构造函数的名称与类名相同,没有返回值类型(包括void)。例如:
class MyClass {
public:int value;MyClass() {value = 0;}
};
  • 这是一个默认构造函数,当创建MyClass对象时,如果没有提供初始化参数,就会调用这个默认构造函数。也可以有带参数的构造函数,例如:
class MyClass {
public:int value;MyClass(int initValue) {value = initValue;}
};
  • 构造函数的执行时机是在对象创建时。例如:
MyClass object1;  // 调用默认构造函数
MyClass object2(5);  // 调用带参数的构造函数,参数为5
2. 析构函数
  • 析构函数是在对象销毁时自动调用的特殊成员函数,用于清理对象占用的资源。析构函数的名称是在类名前加~。例如:
class MyClass {
public:int* dynamicArray;MyClass() {dynamicArray = new int[10];}~MyClass() {delete[] dynamicArray;}
};
  • 在这个例子中,构造函数中动态分配了一个整数数组,析构函数用于释放这个数组占用的内存。析构函数的执行时机是在对象生命周期结束时,比如对象所在的作用域结束(如果是栈对象)或者使用delete释放堆对象时。例如:
{MyClass localObject;// 对象在这个作用域内有效
}  // 作用域结束,localObject的析构函数被调用
MyClass* pointerObject = new MyClass;
// 使用对象
delete pointerObject;  // 调用析构函数

实验步骤

  1. 定义一个枚举类型 CPU_Rank,其形式为 enum CPU_Rank {P1 = 1, P2, P3, P4, P5, P6, P7},以此来表征 CPU 的不同等级。
  2. 声明 CPU 类,在类中设置等级(rank)、频率(frequency)、电压(voltage)等数据成员,并将它们设置为私有属性,以确保数据的封装性和安全性。
  3. 声明成员函数 run 和 stop,这两个函数的功能是输出相应的提示信息,从而直观地展示函数的执行情况。
  4. 在构造函数和析构函数中也添加输出提示信息的语句,以便清晰地观察对象的创建与销毁过程。
  5. 在主程序中创建一个 CPU 类的对象,并调用其成员函数,在此过程中仔细观察类对象的构造与析构的先后顺序,以及各个成员函数被调用时的具体情况,深入理解类与对象在 C++ 程序中的运行机制。

测试说明

根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。

预期输出:

构造了一个CPU!
CPU开始运行!
CPU停止运行!
析构了一个CPU!

通关代码

#include <iostream>
using namespace std;enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7};
class CPU
{
private:CPU_Rank rank;int frequency;float voltage;
public:CPU (CPU_Rank r, int f, float v){/********** Begin **********/rank = r;frequency = f;voltage = v;cout << "构造了一个CPU!"<<endl;/********** End **********/}~CPU () { /********** Begin **********/cout<<"析构了一个CPU!"<<endl;/********** End **********/}CPU_Rank GetRank() const { return rank; }int GetFrequency() const { return frequency; }float GetVoltage() const { return voltage; }void SetRank(CPU_Rank r) { rank = r; }void SetFrequency(int f) { frequency = f; }void SetVoltage(float v) { voltage = v; }void Run() {/********** Begin **********/cout <<"CPU开始运行!"<<endl;/********** End **********/}void Stop() {/********** Begin **********/cout <<"CPU停止运行!"<<endl;/********** End **********/}
};int main()
{CPU a(P6,300,2.8);a.Run();a.Stop();
}

测试结果

在这里插入图片描述

相关文章:

【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、类的声明和使用 1. 类的声明基础 2. 类的访问控制 3. 类的使用 二、类的声明和对象的声明 1. 类声明中的函数定义 2. 对象声明的多种方式 三、构造函数和析构函数的执行过程 1. 构造函数 2. 析构函数 实验步骤 测试说明…...

性能测试05|JMeter:分布式、报告、并发数计算、性能监控

目录 一、JMeter分布式 1、应用场景 2、原理 3、分布式相关注意事项 4、分布式配置与运行 二、JMeter报告 1、聚合报告 2、HTML报告 三、并发用户数&#xff08;线程数&#xff09;计算 四、JMeter下载第三方插件 五、性能监控 1、Concurrency Thread Group 线程组…...

关于Java面试题大全网站无法访问的解决方案

如果Java面试题大全网站无法访问&#xff0c;你仍然可以通过以下渠道获取高质量的Java面试题资源&#xff1a; 1. 国内网站 牛客网&#xff1a; 网址&#xff1a;https://www.nowcoder.com/特点&#xff1a;提供大量Java面试题和在线编程练习&#xff0c;适合刷题和模拟面试。推…...

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…...

SwiftUI 撸码常见错误 2 例漫谈

概述 在 SwiftUI 日常撸码过程中&#xff0c;头发尚且还算茂盛的小码农们经常会犯这样那样的错误。虽然犯这些错的原因都很简单&#xff0c;但有时想要快速准确的定位它们却并不容易。 况且这些错误还可能在模拟器和 Xcode 预览&#xff08;Preview&#xff09;表现的行为不甚…...

JavaScript系列(9)-- Set数据结构专题

JavaScript Set数据结构专题 &#x1f3b2; 在前八篇文章中&#xff0c;我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型、Object高级特性和Array高级操作。今天&#xff0c;让我们深入了解JavaScript中的Set数据结构。Set是…...

开发培训-慧集通(iPaaS)集成平台脚本开发Groovy基础培训视频

‌Groovy‌是一种基于Java虚拟机&#xff08;JVM&#xff09;的敏捷开发语言&#xff0c;结合了Python、Ruby和Smalltalk的许多强大特性。它旨在提高开发者的生产力&#xff0c;通过简洁、熟悉且易于学习的语法&#xff0c;Groovy能够与Java代码无缝集成&#xff0c;并提供强大…...

【软考网工笔记】计算机基础理论与安全——网络规划与设计

HFC 混合光纤同轴电缆网 HFC: Hybrid Fiber - Coaxial 的缩写&#xff0c;即混合光纤同轴电缆网。是一种经济实用的综合数字服务宽带网接入技术。 HFC 通常由光纤干线、同轴电缆支线和用户配线网络三部分组成&#xff0c;从有线电视台出来的节目信号先变成光信号在干线上传输…...

【设计模式】 基本原则、设计模式分类

设计模式 设计模式是软件工程中的一种通用术语&#xff0c;指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现&#xff0c;而是描述了如何解决某一类问题的思路和方法。 如果熟悉了设计模式&#xff0c;当遇到类似的场景&#xff0c;我们可以快速地…...

mac m2 安装 docker

文章目录 安装1.下载安装包2.在downloads中打开3.在启动台打开打开终端验证 修改国内镜像地址小结 安装 1.下载安装包 到官网下载适配的安装包&#xff1a;https://www.docker.com/products/docker-desktop/ 2.在downloads中打开 拖过去 3.在启动台打开 选择推荐设置 …...

Vue3-pinia的具体使用和刷新页面状态保持解决方案

在 Vue 3 中&#xff0c;Pinia 是一个官方推荐的状态管理库&#xff0c;它替代了 Vuex&#xff08;Vuex在Vue3中依然可以正常使用&#xff09;&#xff0c;提供了更加简洁和现代的 API&#xff0c;同时能够与 Vue 3完美配合。在本回答中&#xff0c;我们将详细介绍 Pinia 的使用…...

用ResNet50+Qwen2-VL-2B-Instruct+LoRA模仿Diffusion-VLA的论文思路,在3090显卡上训练和测试成功

想一步步的实现Diffusion VLA论文的思路&#xff0c;不过论文的图像的输入用DINOv2进行特征提取的&#xff0c;我先把这个部分换成ResNet50。 老铁们&#xff0c;直接上代码&#xff1a; from PIL import Image import torch import torchvision.models as models from torch…...

创建.net core 8.0项目时,有个启用原生AOT发布是什么意思

启用原生 AOT 发布&#xff08;Native AOT publishing&#xff09; 是指在 .NET 6 及更高版本中使用 Ahead-of-Time (AOT) 编译 技术&#xff0c;将应用程序提前编译为本地机器代码&#xff0c;从而生成更高效、更快速启动的可执行文件。 1. AOT 编译是什么&#xff1f; AOT …...

2.1.7-1 io_uring的使用

一、背景 &#xff08;1&#xff09;下面几个有关异步操作的例子&#xff1a; a&#xff09;客户端和服务端的异步关系&#xff0c;就是客户端发送请求后不需要等待结果&#xff0c;接下来发送其他请求。 b&#xff09;对于服务端&#xff0c;客户端来请求后&#xff0c;服务…...

群论学习笔记

什么是对称&#xff1f; 对称是一个保持对象结构不变的变换&#xff0c;对称是一个过程&#xff0c;而不是一个具体的事物&#xff0c;伽罗瓦的对称是对方程根的置换&#xff0c;而一个置换就是对一系列事物的重排方式&#xff0c;严格的说&#xff0c;它也并不是这个重排本身…...

深入解析-正则表达式

学习正则&#xff0c;我们到底要学什么&#xff1f; 正则表达式&#xff08;RegEx&#xff09;是一种强大的文本匹配工具&#xff0c;广泛应用于数据验证、文本搜索、替换和解析等领域。学习正则表达式&#xff0c;我们不仅要掌握其语法规则&#xff0c;还需要学会如何高效地利…...

yolov5核查数据标注漏报和误报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示&#xff1a;以下是本篇文章正文内容&#xff0c;…...

日志聚类算法 Drain 的实践与改良

在现实场景中&#xff0c;业务程序输出的日志往往规模庞大并且类型纷繁复杂。我们在查询和查看这些日志时&#xff0c;平铺的日志列表会让我们目不暇接&#xff0c;难以快速聚焦找到重要的日志条目。 在观测云中&#xff0c;我们在日志页面提供了聚类分析功能&#xff0c;可以…...

如何让用户在网页中填写PDF表格?

在网页中让用户直接填写PDF表格&#xff0c;可以大大简化填写、打印、扫描和提交表单的流程。通过使用复选框、按钮和列表等交互元素&#xff0c;PDF表格不仅让填写过程更高效&#xff0c;还能方便地在电脑或移动设备上访问和提交数据。 以下是在浏览器中显示可填写PDF表单的四…...

GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习

2.最大子数组和 问题描述 代码解答 #include<bits/stdc.h> using namespace std; const int N1005; int sum,n,a[N]; int res-1;int result(){for(int i0;i<n;i){if(sum<0) suma[i];else{suma[i];resmax(res,sum);}}return res; } int main(){cin>>n;for(i…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...