NUIST_LAB03

news/2025/11/21 17:13:44/文章来源:https://www.cnblogs.com/witlethe/p/19253811

🧪 实验报告

一、实验名称

实验2 类和对象_基础编程2

二、实验目的

理解类的组合机制(has-a),能熟练用 C++ 定义与使用组合类
理解深复制与浅复制的区别
灵活运用标准库(array、vector、string、迭代器、算法库等)解决实际问题
面向具体问题,运用面向对象思维设计类(自定义/标准库),合理组合并编程解决

三、实验内容

  1. 实验任务1
    image

问题1:是
问题2:优点:测试比较方便,便于了解对象内部状态
缺点:增加了接口的维护成本,暴露了内部实现细节
根据最小接口(ISP)原则进行设计
如果用户需要就public,是内部细节就private,可能会破坏对象状态就private
问题3:性能:返回引用避免拷贝,更快;安全性上第二个更好,返回引用会面对悬垂问题,如果button先于获取引用的的地方被销毁将会发生未定义行为
问题4:emplace_back使用perfect forwarding和变长参数表就地构造对象,性能更高
2. 实验任务2
image

问题1:填充构造,拷贝构造;5,5
问题2:2,2,3
问题3:大概率相同;是否会发生越界检查
问题4:能 r是v1[0]的alias 话说这个问题是不是有点奇怪
因为是常量引用,所以是v1[0]的alias,限制是通过r只能进行只读访问
问题5:深
int
const int

3. 实验任务3
image

问题1:如果传入自己,那么第一步把空间释放了vi.ptr[i]会访问到错误区域
用中间量的话new失败了好处理,可以直接加catch throw
这种较底层的数据结构好像也不能用智能指针

问题2:将this由vectorInt转换为const vectorInt, 转换成可以指向const对象的指针,然后就可以调用const版本的at
说到这里我特地查了一下,一般都是实现const版本然后非const版本通过类型转换进行调用,但是很显然我做课设的时候忘记了这一点:(
作用是消const,原const int&,先int&

问题3:非const;const
迭代器封装了指针的行为,让指针变得更加安全,不同类型的迭代器(比如随机访问迭代器和顺序访问迭代器)就像特殊函数,可以安全的作为参数提供给其他函数使用
就像golang中的interface,只要实现了对应的迭代器类型,就可以直接适配所有拥有这个接口的函数,在保证安全性的前提下极大增强了可扩展性

问题4:可以
从ptr开始向后n个填充value
从vi.ptr开始,向后vi.n个元素填充到从ptr开始的数组中
第三个同上

  1. 实验任务4
#include "matrix.hpp"void die(const char *msg) {std::cerr << msg << '\n';std::exit(-1);
}Matrix::Matrix(int rows_, int cols_, double value): n_rows(rows_), n_cols(cols_), ptr(nullptr) {if (n_rows <= 0 || n_cols <= 0)die("ValueError: invalid matrix size");ptr = new double[n_rows * n_cols];std::fill(ptr, ptr + n_rows * n_cols, value);
}Matrix::Matrix(int rows_, double value) : Matrix(rows_, rows_, value) {}Matrix::Matrix(const Matrix &x): n_rows(x.n_rows), n_cols(x.n_cols), ptr(nullptr) {ptr = new double[n_rows * n_cols];std::copy(x.ptr, x.ptr + n_rows * n_cols, ptr);
}Matrix::~Matrix() { delete[] ptr; }void Matrix::set(const double *pvalue, int size) {if (size != n_rows * n_cols)die("ValueError: size mismatch");if (!pvalue)die("ValueError: null data source");std::copy(pvalue, pvalue + size, ptr);
}void Matrix::clear() { std::fill(ptr, ptr + n_rows * n_cols, 0); }const double &Matrix::at(int i, int j) const {if (i < 0 || i >= n_rows || j < 0 || j >= n_cols)die("IndexError: index out of range");return ptr[i * n_cols + j];
}double &Matrix::at(int i, int j) {if (i < 0 || i >= n_rows || j < 0 || j >= n_cols)die("IndexError: index out of range");return ptr[i * n_cols + j];
}int Matrix::rows() const { return n_rows; }int Matrix::cols() const { return n_cols; }void Matrix::print() const {for (int i = 0; i < n_rows; ++i) {if (n_cols == 0) {std::cout << '\n';continue;}std::cout << ptr[i * n_cols];for (int j = 1; j < n_cols; ++j)std::cout << ' ' << ptr[i * n_cols + j];std::cout << '\n';}
}

image

  1. 实验任务5
// 待补足1:int index(const std::string &name) const;实现
// 返回联系人在contacts内索引; 如不存在,返回-1int ContactBook::index(const std::string &name) const {for (size_t i = 0; i < contacts.size(); ++i) {if (contacts[i].get_name() == name) {return static_cast<int>(i);}}return -1;
}// 待补足2:void ContactBook::sort();实现
// 按姓名字典序升序排序通讯录void ContactBook::sort() {std::sort(contacts.begin(), contacts.end(),[](const Contact &lhs, const Contact &rhs) {return lhs.get_name() < rhs.get_name();});
}

image

四、实验结论

本次实验验证了 C++ 中面向对象设计和资源管理的关键机制。在任务一中,通过 Window 和 Button 的组合关系,理解了组合(Has-A)的定义及其生命周期依赖性。任务二和任务三通过对 std::vector 和自定义 vectorInt 的观察,深入理解了深复制与浅复制的根本区别,确认了标准库容器采用深复制,并掌握了实现自定义深复制所需的“三/五法则”(包括拷贝构造和异常安全的 assign 实现)。同时,实验验证了 const 成员函数的必要性,以及使用 const_cast 在非 const 版本中复用 const 版本的代码复用技巧。最后,任务四和任务五的应用性实验强化了利用标准库(如 std::vector 和 )实现 RAII 和高效逻辑封装的重要性,体现了零成本抽象的设计哲学,即在保证安全性的同时不牺牲性能。

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

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

相关文章

实力评比榜单,留学机构排行榜TOP10实力强劲

在留学热潮持续升温的当下,选择靠谱的留学机构成为学子和家长们的重中之重。优质机构能凭借专业服务为留学之路保驾护航,而实力不足的机构则可能耽误申请进程。以下这份留学机构排行榜 TOP10,结合服务质量、录取成果…

ASIS_CTF_b00ks

ASIS CTF b00ks - off by null 第一道off by null的题目!小小的字符串处理失误竟会带来如此巨大的安全后果(攻击者直接远程控制计算机),非常有意思的一题。 题目是一个远程的图书管理程序,用户可以给服务器发送信…

2025年11月密封胶条十大品牌推荐:一线品质守护家居密封安全

在家装门窗系统中,密封胶条是 “隐形守护者”,其材质、性能直接影响门窗的隔音、防水、耐候性,甚至关乎家居生活的舒适度与安全性。随着门窗行业高质量发展,密封胶条的品质需求日益提升,纯原胶材质、先进生产技术…

2025年液压车身平衡杆批发厂家权威推荐榜单:SUV车身平衡杆/MPV车身平衡杆/新能源车身平衡杆源头厂商精选

在汽车产业转型升级与新能源汽车快速普及的双重驱动下,液压车身平衡杆市场正以每年8%-12%的速度持续增长,成为提升车辆稳定性与驾乘体验的关键部件。 液压车身平衡杆作为车辆悬挂系统的核心组成部分,其技术性能、质…

2025 最新河北廊坊建筑模板厂家排行榜,京津冀标杆企业领衔 耐用高性价比品牌权威推荐建筑模板,清水模板,建筑木方公司推荐

引言 在建筑行业高质量发展的当下,建筑模板作为工程基础核心材料,其品质直接决定施工效率、工程质量与综合成本。当前市场品牌繁杂,部分厂家存在原材料劣质、工艺不规范等问题,导致模板周转次数低、易变形,不仅增…

Vibe Coding:蜜月期过了,该聊聊“技术债”了

“Vibe Coding”(氛围编程)像摇滚明星一样闯进了开发者圈子。 那时候,大家都在谈论抛弃僵化的架构图,关掉烦人的 Linter(代码检查器),跟着直觉走。甚至有人鼓吹:别管什么设计模式,让 AI 和你的直觉带飞,写代…

【压测数据分享】VictoriaLogs 中使用 elasticsearch 格式写入对比 jsonline 格式写入的性能差异

【压测数据分享】VictoriaLogs 中使用 elasticsearch 格式写入对比 jsonline 格式写入的性能差异作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客 zhihu Github 公众号:一本正经的瞎扯通过阅读…

2025年铁基络合剂厂家权威推荐榜单:络合铁脱硫剂/沼气脱硫剂/天然气脱硫剂源头厂家精选

在环保要求日益严格和清洁能源快速发展的背景下,铁基络合剂作为高效脱硫技术的核心材料,其市场需求持续增长。据行业数据显示,2024年中国脱硫剂市场规模已达65亿元,年均增长率稳定在12.8%左右。其中,铁基络合剂因…

红米note 10 miui dev 13 magisk root权限后burp证书安装

1.已解锁的设备 2.刷机了miui dev版本 https://web.vip.miui.com/page/info/mio/mio/detail?postId=37393453&app_version=dev.20051 3.将解压后的固件包中boot.img拷贝到手机端 /storage/sdcard0/Download/ 4.手…

2025 年 11 月苏州短视频运营厂家推荐排行榜,短视频拍摄运营,制作运营,矩阵运营,账号代运营,运营拓客推广服务公司团队精选

2025 年 11 月苏州短视频运营厂家推荐排行榜,短视频拍摄运营,制作运营,矩阵运营,账号代运营,运营拓客推广服务公司团队精选 行业背景与发展趋势 随着数字经济的深入发展,短视频已成为企业营销和品牌建设的重要阵…

access token 和refresh token

access token 和refresh tokenAccess Token 与 Refresh Token:核心概念、区别及实战用法 在认证授权场景(如 API 调用、系统登录)中,Access Token(访问令牌) 和 Refresh Token(刷新令牌) 是一套 “安全且高效”…

2025 最新高温陶瓷纤维滤芯源头厂家权威推荐榜,国际测评认证实力品牌精选!

在全球工业绿色转型进程中,高温烟气净化成为核心环保课题,高温陶瓷纤维滤芯作为关键滤材,其性能直接决定污染物处理效率与设备运行稳定性。本次榜单由国际过滤与分离协会(IFSA)联合行业权威测评机构打造,采用 “…

2025 年 11 月竞价包年厂家推荐排行榜,百度竞价包年厂商,抖音竞价代理公司,关键词包年推广,搜索竞价包年服务,竞价排名包年代理公司推荐

2025年11月竞价包年厂家推荐排行榜:深度解析行业格局与服务选择 在数字化营销日益成熟的今天,竞价包年服务已成为企业获取精准流量、提升品牌曝光的重要方式。随着百度、抖音等主流平台流量生态的不断完善,竞价包年…

2025 最新雷达流量计厂家推荐榜:国际测评认证 + 核心技术加持,优选口碑与实力双优品牌灌区水量计量/河道矩阵/水文站流量测量/山洪监测/明渠雷达流量计/多普勒雷达流速流量计公司推荐

引言 在智慧水务与水环境监测全球化推进的趋势下,雷达流量计作为精准采集水流数据的核心设备,市场需求持续攀升,但行业产品质量参差不齐的问题显著。据国际仪器仪表协会(WIMA)最新测评数据显示,全球雷达流量计产…

质量的科学奠基:当统计学走进工厂车间

在“互换性”解决了零件批量生产的难题后,制造业进入了狂飙突进的年代。工厂里机器轰鸣,产量节节攀升。但一个更棘手的问题出现了:当产品数量以万、十万甚至百万计时,我们该如何保证每一件都符合标准? 质量,需要…

江苏抗17级台风抗风卷帘门厂家排名如何选

江苏作为我国东部沿海省份,每年夏季常受台风天气影响,强风对建筑外围防护设施的安全性提出了极高要求。抗17级台风的卷帘门作为重要的建筑防护装备,其质量与性能直接关系到人员与财产安全。在选择相关生产厂家时,了…

2025 最新电磁流量计厂家推荐榜:覆盖高精度 / 大口径 / 物联网等多场景,权威测评优选品牌插入式/浆液电磁流量计/电磁流量计表头公司推荐

引言 随着工业自动化与智慧监测领域的快速迭代,电磁流量计作为流量计量的核心设备,其精度稳定性、场景适配性与智能化水平成为行业核心诉求。据国际仪器仪表协会(ISA)最新测评数据显示,全球电磁流量计市场中仅 32…

docker配置wordpress和mysql

我是之前用docker安装过wordpress和mysql 所以我需要先彻底移除现有容器与数据 为了确保重新安装时没有旧数据的干扰,需要先删除容器,再删除它们使用的数据卷。如果做过数据持久化数据没有影响。停止并删除容器在终端…

江苏抗17级台风抗风卷帘门厂家排名怎么选

江苏抗17级台风抗风卷帘门厂家排名怎么选在台风多发的江苏地区,抗17级台风的卷帘门作为重要的建筑防护设施,其质量与性能直接关系到财产安全与使用稳定性。随着市场需求的增长,各类抗风卷帘门厂家不断涌现,了解行业…

2025少儿编程学习机构哪家好?5大优质品牌推荐及家长选择指南

2025少儿编程学习机构哪家好?5大优质品牌推荐及家长选择指南在人工智能浪潮下,编程已成为青少儿必备的核心素养之一。面对市场上五花八门的编程机构,家长们往往陷入“选择困难”。究竟哪些少儿编程学习机构能真正贴…