【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
前言
大家好吖,欢迎来到 YY 滴C++复习系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
- YY的《C++》专栏
- YY的《C++11》专栏
- YY的《Linux》专栏
- YY的《数据结构》专栏
- YY的《C语言基础》专栏
- YY的《初学者易错点》专栏
- YY的《小小知识点》专栏
- 更加详细和全面的C++知识讲解——>可关注 YY的《C++》专栏
- 此系列主打期末复习速过,一些基本知识点会略过(例如虚函数具体原理等等)
目录
- 一、简述题
- 1. 简述构造函数和析构函数分别有什么作用?
- 2. 公有成员和私有成员的区别是什么?
- 3. 什么是拷贝构造函数?它何时被调用?
- 二、代码题
- 例题1:
- 例题2:
- 例题3:
- 例题4:
- 例题5:
- 例题6:
- 例题7:
一、简述题
1. 简述构造函数和析构函数分别有什么作用?
构造函数用于在创建对象时初始化对象的数据成员,为对象分配内存空间,并执行其他必要的初始化操作。它通常用于初始化对象的状态,设置初始值,分配资源等。
析构函数用于在对象被销毁时执行一些清理工作,比如释放对象占用的资源,关闭文件,断开连接等。它通常用于在对象生命周期结束时执行一些必要的清理操作,以确保对象的资源得到正确释放。
2. 公有成员和私有成员的区别是什么?
公有成员和私有成员是面向对象编程中的两种访问控制权限。
公有成员是指在类的外部和派生类中都可以被访问的成员。这意味着任何地方都可以访问和修改公有成员。公有成员通常用于提供接口和功能,以便外部代码可以与类进行交互。
私有成员是指只能在类的内部访问的成员,外部代码无法直接访问或修改私有成员。私有成员通常用于隐藏类的实现细节,以防止外部代码直接访问和修改内部数据,从而提高类的封装性和安全性。
总的来说,公有成员提供了对外部代码的接口,而私有成员隐藏了类的实现细节,使得类的内部状态和行为对外部代码不可见。
3. 什么是拷贝构造函数?它何时被调用?
- 拷贝构造函数是一种特殊的构造函数,用于创建一个新对象并将其初始化为另一个同类对象的副本。它的函数签名通常是类名(const 类名
&obj),其中参数是对同类对象的引用。拷贝构造函数通常在以下情况下被调用:
- 当使用一个对象来初始化另一个对象时,会调用拷贝构造函数。
- 当把一个对象作为参数传递给函数,以值传递的方式传递对象时,也会调用拷贝构造函数。
- 当从函数返回一个对象时,也可能会调用拷贝构造函数。
- 拷贝构造函数的作用是创建一个新的对象,并将其初始化为另一个对象的副本,以确保在这些情况下对象的数据成员得到正确复制,而不是简单地复制对象的地址。
二、代码题
例题1:
- 声明一个名为Tree的类,它有数据成员age(树龄),有成员函数grow(int year),用于计算经过year这么多年的成长后树的最新年龄,以及GetAge(),用于提取树的年龄,并定义构造函数用于初始化tree对象的属性
class Tree {
private:int age; // 树龄public:// 构造函数,初始化树的年龄Tree(int initialAge) : age(initialAge) {}// 成长函数,计算经过year年后的树的最新年龄void grow(int years) {age += years;}// 获取树的年龄int getAge() {return age;}
};
例题2:
- 创建一个类,模仿基本数据类型的部分功能,将这个类命名为Integer(注意,这和表示整数类型的int大小写不同)。Integer类拥有整型数据成员value(数值),还有一些成员函数,比如显示一个Integer对象的值,以及将两个Integer对象相加。要求定义构造函数用于初始化Integer对象的值
#include <iostream>class Integer {
private:int value; // 整型数值public:// 构造函数,用于初始化整数值Integer(int v) : value(v) {}// 显示Integer对象的值void displayValue() {std::cout << "The value is: " << value << std::endl;}// 将两个Integer对象相加Integer add(const Integer& other) {return Integer(value + other.value);}
};
例题3:
- 创建一个类,模仿基本数据类型的部分功能,将这个类命名为Integer(注意,这和表示整数类型的int大小写不同)。Integer类拥有整型数据成员value(数值),还有一些成员函数,比如显示一个Integer对象的值,以及将两个Integer对象相加。要求定义构造函数用于初始化Integer对象的值
#include <iostream>class Integer {
private:int value; // 整型数值public:// 构造函数,用于初始化整数值Integer(int v) : value(v) {}// 显示Integer对象的值void displayValue() {std::cout << "The value is: " << value << std::endl;}// 将两个Integer对象相加Integer add(const Integer& other) {return Integer(value + other.value);}
};
例题4:
- 考虑几何图形圆,它有属性:半径,行为:获取半径值,计算周长,计算面积,输出圆的相关信息。根据上述分析,请声明并实现一个Circle类
#include <iostream>class Circle {
private:double radius; // 半径public:// 构造函数,用于初始化半径Circle(double r) : radius(r) {}// 获取半径值double getRadius() {return radius;}// 计算周长double calculatePerimeter() {return 2 * 3.14159 * radius;}// 计算面积double calculateArea() {return 3.14159 * radius * radius;}// 输出圆的相关信息void printInfo() {std::cout << "Circle Information:" << std::endl;std::cout << "Radius: " << radius << std::endl;std::cout << "Perimeter: " << calculatePerimeter() << std::endl;std::cout << "Area: " << calculateArea() << std::endl;}
};
例题5:
- 编写一个程序,设计一个类Score用于统计一个班的学生成绩,其中定义一个静态数据成员totalScore存储总分,一个静态成员函数GetTotalScore( )实现对该静态数据成员的访问
#include <iostream>class Score {
private:static int totalScore; // 静态数据成员,存储总分public:// 静态成员函数,实现对静态数据成员的访问static int GetTotalScore() {return totalScore;}
};// 静态数据成员的定义和初始化
int Score::totalScore = 0;int main() {// 假设有一些学生成绩需要统计int scores[] = {80, 90, 75, 85, 95};// 统计总分for (int i = 0; i < 5; i++) {Score::totalScore += scores[i];}// 输出总分std::cout << "Total score: " << Score::GetTotalScore() << std::endl;return 0;
}
例题6:
- 创建一个名为Time的类,它包括分别表示小时、分钟和秒的int类型的数据成员以及两个构造函数,一个构造函数将这个数据初始化为0,另一个将它初始化为一个固定的值。另有一成员函数将时间以11:59:59的格式显示在屏幕上。
#include <iostream>class Time {
private:int hours;int minutes;int seconds;public:// 默认构造函数,将时间初始化为0Time() : hours(0), minutes(0), seconds(0) {}// 带参数的构造函数,将时间初始化为给定值Time(int h, int m, int s) : hours(h), minutes(m), seconds(s) {}// 显示时间在屏幕上void displayTime() {std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;}
};
- 构造函数用缺省值的形式来写
#include <iostream>class Time {
private:int hours;int minutes;int seconds;public:// 默认构造函数,将时间初始化为0Time(int h = 0, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s) {}// 显示时间在屏幕上void displayTime() {std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;}
};
例题7:
- 编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的父类。试编程实现,并将编写的代码贴到原代码处。
#include <iostream>
#include <string>// 父类 Person
class Person {
protected:int id;std::string name;public:void inputPersonData() {std::cout << "Enter ID: ";std::cin >> id;std::cout << "Enter Name: ";std::cin >> name;}void displayPersonData() {std::cout << "ID: " << id << std::endl;std::cout << "Name: " << name << std::endl;}
};// 子类 Student
class Student : public Person {
private:int classNumber;int score;public:void inputStudentData() {inputPersonData();std::cout << "Enter Class Number: ";std::cin >> classNumber;std::cout << "Enter Score: ";std::cin >> score;}void displayStudentData() {displayPersonData();std::cout << "Class Number: " << classNumber << std::endl;std::cout << "Score: " << score << std::endl;}
};// 子类 Teacher
class Teacher : public Person {
private:std::string title;std::string department;public:void inputTeacherData() {inputPersonData();std::cout << "Enter Title: ";std::cin >> title;std::cout << "Enter Department: ";std::cin >> department;}void displayTeacherData() {displayPersonData();std::cout << "Title: " << title << std::endl;std::cout << "Department: " << department << std::endl;}
};int main() {Student student;Teacher teacher;std::cout << "Enter Student Data:" << std::endl;student.inputStudentData();std::cout << std::endl;std::cout << "Enter Teacher Data:" << std::endl;teacher.inputTeacherData();std::cout << std::endl;std::cout << "Student Data:" << std::endl;student.displayStudentData();std::cout << std::endl;std::cout << "Teacher Data:" << std::endl;teacher.displayTeacherData();return 0;
}
相关文章:
【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
前言 大家好吖,欢迎来到 YY 滴C复习系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…...
游戏开发中,你的游戏图片压缩格式使用ASTC了吗
文章目录 ASTC原理:使用要求 ASTC(Adaptive Scalable Texture Compression,自适应可伸缩纹理压缩)是一种高级的纹理压缩技术,由ARM公司开发并推广。它在图形处理领域中因其出色的压缩效率和灵活性而受到广泛关注。 AST…...
【PostgreSQL】数据查询-概述
PostgreSQL数据查询 概述 检索或从数据库中检索数据的命令的过程称为查询。在 SQL 中,SELECT 命令用于指定查询。该命令的一般语法是SELECT [WITH with_queries] SELECT select_list FROM table_expression [sort_specification]一种简单的查询形式为:…...
element input组件自动失去焦点问题解决
最近在 Vue3 ElementPlus 中,使用 el-input 组件时,如果设置了 v-model,那么在每次改变内容后后,input 会自动失去焦点,这样会导致用户无法输入多个字符。 一、问题原因 如上图所示,配置项的 Name 和 Cod…...
鸿蒙Harmony--状态管理器-@Observed装饰器和@ObjectLink装饰器详解
经历的越多,越喜欢简单的生活,干净的东西,清楚的感觉,有结果的事,和说到做到的人。把圈子变小,把语放缓,把心放宽,用心做好手边的事儿,该有的总会有的! 目录 一ÿ…...
pytorch安装
pytoch安装 1. 准备工作1.1 需要提前安装的软件 2. 安装pyTorch我遇到的问题 3. 显卡测试4. CPU与GPU切换方法4.1 创建张量4.2 第一种切换方法4.3 第二种切换方法 1. 准备工作 1.1 需要提前安装的软件 Anaconda 史上最全最详细的Anaconda安装教程CUDA CUDA安装教程࿰…...
GBASE南大通用系统目录表
系统目录由描述数据库结构的表和视图组成。这些表对象有时称为数据字典,它们包含 数据库本身的所有信息。每个系统目录表都包含有关数据库中特定元素的信息。每个数据 库都有它自己的系统目录。 这些主题提供了有关系统目录表的结构、内容和使用的信息。还包含了有关…...
RPCMS跨站脚本漏洞(xss)
CNVD-ID: CNVD-2024-01190 漏洞描述: RPCMS是一个应用软件,一个网站CMS系统。 RPCMS v3.5.5版本存在跨站脚本漏洞,该漏洞源于组件/logs/dopost.html中对用户提供的数据缺乏有效过滤与转义,攻击者可利用该漏洞通过注入精心设计的有效载荷执行…...
Linux进阶命令使用
在 Linux 中,除了常用的基础命令,有一系列进阶命令可以帮助用户更有效地管理系统和执行复杂的任务。以下是一些常见的 Linux 进阶命令及其用法: 文本处理 grep:搜索文本并打印匹配的行。 grep pattern filenameawk:用…...
重定位,进程的创建,线程相关
重定位 进程的重定位指将程序加载到内存中不同的位置执行,在进程换出换入过程中将会发生。通过更新程序中使用的相对地址。 进程的创建——fork() 进程树,在自己的节点下创建进程节点。 使用fork,创建的子进程是父进…...
Java填充Execl模板并返回前端下载
功能:后端使用Java POI填充Execl模板,并返回前端下载 Execl模板如下: 1. Java后端 功能:填充模板EXECL,并返回前端 controller层 package org.huan.controller;import org.huan.dto.ExcelData; import org.huan.util.ExcelT…...
ChatGPT本地部署,学习记录
一、GPT4ALL模型 官网地址: Github:https://github.com/nomic-ai/gpt4all GPT4ALL项目部署简易,但是在运行体验上一般,并且是只调用CPU来进行运算。 看官方文档介绍在嵌入式上有比较大的优势,但是目前个人对嵌入式…...
Find My游戏手柄|苹果Find My技术与手柄结合,智能防丢,全球定位
游戏手柄是一种常见电子游戏机的部件,通过操纵其按钮等,实现对游戏虚拟角色的控制。随着游戏设备硬件的升级换代,现代游戏手柄又增加了:类比摇杆(方向及视角),扳机键以及HOME菜单键等。现在的游…...
2024美赛数学建模思路 - 复盘:光照强度计算的优化模型
文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…...
【Deep Dive: AI Webinar】开放 ChatGPT - 人工智能开放性运作的案例研究
【深入探讨人工智能】网络研讨系列总共有 17 个视频。我们按照视频内容,大致上分成了 3 个大类: 1. 人工智能的开放、风险与挑战(4 篇) 2. 人工智能的治理(总共 12 篇),其中分成了几个子类&…...
Devops相关问题及答案(2024)
1、DevOps 的理念是什么? DevOps是一种组织文化、流程和工具的集合,旨在提高软件交付的速度和质量,通过自动化和持续改进的方法来促进开发(Dev)和运维(Ops)的协作。 DevOps的核心理念包括&…...
掌握Python设计模式,SQL Alchemy打破ORM与模型类的束缚
大家好,反转软件组件之间的依赖关系之所以重要,是因为它有助于降低耦合度和提高模块化程度,进而可以提高软件的可维护性、可扩展性和可测试性。 当组件之间紧密耦合时,对一个组件的更改可能会对其他组件产生意想不到的影响&#…...
性能分析与调优: Linux 磁盘I/O 观测工具
目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 (1)主机 …...
Could not erase files or folders:
IDEA删除 git 的 localChanges 内的文件时,提示Could not erase files or folders:。 确认下这个文件是否被打开,忘记关闭了;关闭后可以被删除。(文件被打开的情况下,用操作系统自带的删除,也无法删除成功…...
算法训练营第四十四天|动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ
目录 动态规划:完全背包理论基础Leetcode518.零钱兑换IILeetcode377. 组合总和 Ⅳ 动态规划:完全背包理论基础 文章链接:代码随想录 题目链接:卡码网:52. 携带研究材料 思路:完全背包问题,物品可…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
