C++重点和练习

 

 作业1:实现类中有类的几个特殊成员函数

#include <iostream>using namespace std;class Person
{string name;int *age;
public:Person():name("none"),age(new int(0)){}Person(int age):age(new int(age)){}Person(string name,int age):name(name),age(new int(age)){}Person(const Person &other):name(other.name),age(new int(*(other.age))){}~Person(){delete age;}void show();void set_age(int age){*(this->age) = age;}Person &operator=(const Person &other){name = other.name;*age = *(other.age);return *this;}
};class Stu
{Person p1;const double score;
public:Stu(string name,int age,double score):p1(name,age),score(score){}Stu():score(0){}Stu(const Stu &other):p1(other.p1),score(other.score){}~Stu(){  }void show();void set_age(int age){p1.set_age(age);}Stu &operator=(const Stu &other){p1.operator=(other.p1);return *this;}};void Person::show()
{cout << "name: " << name << endl;cout << "age: " << *age << endl;
}void Stu::show()
{p1.show();cout << "score: " << score << endl;
}int main()
{Stu *s1 = new Stu;s1->show();delete s1;cout << endl;Stu *s2 = new Stu ("张三",18,99.8);s2->show();delete s2;cout << endl;Stu s3("李四",25,25.5);s3.show();cout << endl;Stu s4 = s3;s4.show();cout << endl;s3.set_age(99);s3.show();cout << endl;s4.show();cout << endl;s4.operator=(s3);s4.show();return 0;
}

作业2:实现自定义Mystring

#include <iostream>
#include <cstring>
using namespace std;
char c = '\0';
class My_string
{char *str;     //记录C风格的字符串int size;      //记录字符串长度
public://无参构造//有参构造//拷贝构造//拷贝赋值//析构函数//at函数char &my_at(int num);
};

 答案1(优化版):

#include <iostream>
#include <cstring>
using namespace std;class Mystring
{char *str;int len;
public:// 无参构造函数Mystring() : str(new char[1]), len(0){str[0] = '\0';  // 确保空字符串以null结尾}// 有参构造函数Mystring(const char *str){len = strlen(str);this->str = new char[len + 1];  // +1 为结束符留空间strcpy(this->str, str);}~Mystring(){delete [] str;}//拷贝构造函数Mystring(const Mystring &other){this->len = other.len;this->str = new char[other.len+1];strcpy(this->str,other.str);}// 拷贝赋值函数Mystring &operator=(const Mystring &other){if (this != &other){  // 添加自赋值检查delete[] str;  // 先删除原有内存len = other.len;str = new char[len + 1];  // +1 为结束符留空间strcpy(str, other.str);}return *this;}// 加法运算符重载Mystring operator+(const Mystring &other) const  // 返回新对象,参数使用const{Mystring result;result.len = this->len + other.len;delete[] result.str;  // 删除默认构造函数分配的内存result.str = new char[result.len + 1];  // +1 为结束符留空间strcpy(result.str, this->str);strcat(result.str, other.str);return result;}char &my_at(int location){if(location>len){perror("越界访问");}return *(str+location-1);}void show(){printf(str);}};int main()
{char s[10] = "hello";Mystring str1(s);str1.show();cout << endl;Mystring str2("world");str2.show();cout << endl;Mystring str3 = str2;  // 复制构造str3.show();cout << endl;Mystring str4;str4 = str1 + str2;    // 使用加法运算符str4.show();cout << endl;cout << str4.my_at(16) << endl;return 0;
}

答案2:

#include <iostream>
#include <cstring>
using namespace std;class Mystring
{char *str;int len;
public:Mystring():str(new char[4]{0}),len(4){}Mystring(const char *str){this->len = strlen(str);this->str = new char[len];for(int i=0;i<len;i++){*((this->str)+i) = *(str+i);}}~Mystring(){delete [] str;}Mystring(const Mystring &other){this->len = other.len;this->str = new char[this->len];for(int i=0;i<len;i++){*((this->str)+i) = *((other.str)+i);}}// 修改赋值运算符Mystring &operator=(const Mystring &other)  {if(this != &other)  // 添加自赋值检查{char *temp = new char[other.len];  // 先分配新内存for(int i = 0; i < other.len; i++){temp[i] = other.str[i];}delete[] str;  // 再删除旧内存str = temp;len = other.len;}return *this;}Mystring operator+(Mystring &other){Mystring temp;delete[] temp.str;  // 释放默认构造的内存temp.len = this->len+other.len;temp.str = new char [temp.len];for(int i = 0;i<temp.len;i++){if(i<this->len){*((temp.str)+i) = *((this->str)+i);}else{*((temp.str)+i) = *((other.str+i)-this->len);}}return temp;}void show(){for(int i = 0;i<len;i++){printf("%c",*((this->str)+i));}}};int main()
{char s[10] = "hello";Mystring str1(s);str1.show();cout << endl;Mystring str2("world");str2.show();cout << endl;Mystring str3 = str2;str3.show();cout << endl;Mystring str4;str4 = str1+str2;str4.show();cout << endl;return 0;
}

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

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

相关文章

亚马逊云科技用生成式AI,向开发的复杂性动手了

生成式 AI、分布式扩展功能全面进化&#xff0c;还降价了。 同一天的发布&#xff0c;完全不同的方向。 今天凌晨&#xff0c;云计算巨头亚马逊云科技的 re:Invent 与大号创业公司 OpenAI 的发布「撞了车」。后者公布了一系列生成式 AI 应用&#xff0c;价格更贵、性能更强大&a…

【操作系统】实验二:观察Linux,使用proc文件系统

实验二 观察Linux&#xff0c;使用proc文件系统 实验目的&#xff1a;学习Linux内核、进程、存储和其他资源的一些重要特征。读/proc/stat文件&#xff0c;计算并显示系统CPU占用率和用户态CPU占用率。&#xff08;编写一个程序使用/proc机制获得以及修改机器的各种资源参数。…

day2 数据结构 结构体的应用

思维导图 小练习&#xff1a; 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学…

SQL Server:只有MDF文件,如何附加数据库

第一步&#xff1a;先新建一个同名数据库&#xff0c;然后停止sql服务&#xff0c;删除新建数据库.ldf文件。 第二步&#xff1a;将要附加的数据库的.mdf文件覆盖刚新建的.mdf文件&#xff0c;并重启sql服务。 第三步&#xff1a;这时数据库DATA目录下只有一个.mdf文件&#xf…

React开发高级篇 - React Hooks以及自定义Hooks实现思路

Hooks介绍 Hooks是react16.8以后新增的钩子API&#xff1b; 目的&#xff1a;增加代码的可复用性&#xff0c;逻辑性&#xff0c;弥补无状态组件没有生命周期&#xff0c;没有数据管理状态state的缺陷。 为什么要使用Hooks&#xff1f; 开发友好&#xff0c;可扩展性强&#…

jmeter调整字号无法生效?

调整之前如上图&#xff0c;字体非常小&#xff0c;哪怕我设置的字号是48 查阅了资料&#xff0c;试了几次&#xff0c;解决办法如下&#xff1a; 用编辑器打开jmeter.bat 在echo off的下一行添加以下代码 set JVM_ARGS%JVM_ARGS% -Dswing.plaf.metal.controlFontDialog-20…

密码学——密码学基础、散列函数与数字签名

1.密码学概述 是信息安全的基础和核心&#xff0c;是防范各种安全威胁的重要手段&#xff0c;信息安全的许多相关知识都与密码学相关。 密码学发展 密码学是一门古老而又年轻的学科 &#xff0c;几千年以前就存在&#xff0c;至今仍在发展演进。地位非常重要甚至起决定性作用…

知识图谱8:深度学习各种小模型

1、知识图谱的展示有很多工具 Neo4j Browser - - - - 浏览器版本 Neo4j Desktop - - - - 桌面版本 graphX - - - - 可以集成到Neo4j Desktop Neo4j 提供的 Neo4j Bloom 是用户友好的可视化工具&#xff0c;适合非技术用户直观地浏览图数据。Cypher 是其核心查询语言&#xf…

Python | 数据可视化中常见的4种标注及示例

在Python的数据可视化中&#xff0c;标注&#xff08;Annotation&#xff09;技术是一种非常有用的工具&#xff0c;它可以帮助用户更准确地解释图表中的数据和模式。在本文中&#xff0c;将带您了解使用Python实现数据可视化时应该了解的4种标注。 常见的标注方式 文本标注箭…

在Goland中对goroutine协程断点调试

在Goland中对goroutine协程断点调试 环境: Goland 参考了 chatgpt 的回复 进行断点调试的代码 package mainimport ("fmt""sync""time" )// worker 模拟处理任务 func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 确保任务完成后…

深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解

目录 深入理解 JavaScript 中的 Array.find() 方法&#xff1a;原理、性能优势与实用案例详解 一、引言&#xff1a;为什么要使用Array.find() 二、Array.find()的使用与技巧 1、基础语法 2、返回值 3、使用技巧 三、Array.find()的优势与实际应用案例 1、利用返回引用…

Docker 安装 Jenkins:2.346.3

准备&#xff1a;已安装Docker&#xff0c;已配置服务器安全组规则 1581 1、拉取镜像 [rootTseng ~]# docker pull jenkins/jenkins:2.346.3 2.346.3: Pulling from jenkins/jenkins 001c52e26ad5: Pull complete 6b8dd635df38: Pull complete 2ba4c74fd680: Pull complet…

Datawhale AI 冬令营(第一期)定制你的第一个专属模型-学习笔记

最近我报名参加了Datawhale组织的主题为“动手学系列&#xff0c;人人都能应用的AI”的Datawhale AI冬令营&#xff08;第一期&#xff09;。 本次学习一共12天&#xff0c;从12月10日-12月21日&#xff0c;学习会包含【跑通速通手册】&#xff0c;【学习大模型微调&数据集…

异常安全重启运行机制:健壮的Ai模型训练自动化

文章目录 前言一、热力图主函数代码1、正规N图热力图运行代码2、重新迭代循环求解方法 二、中断重启继续推理或训练1、封装含参主函数2、终止重启进程管理方法1、终止启动源码2、源码解读 三、终止启动主函数源码解读1、终止启动源码2、源码解读关键点解析 四、完整代码Demo1、…

Redis01

springbootredis 特点 1.高效性 2.支持多种数据结构 String,list,set,hash.zset 3.稳定性&#xff1a;持久化&#xff0c;主从复制&#xff08;集群&#xff09; 4.其他特性&#xff1a;支持过期时间&#xff0c;支持事务&#xff0c;消息订阅。 安装 1.下载安装包 redis官…

【Unity】Amplify Shader Editor

Amplify Shader Editor (ASE) Amplify Shader Editor&#xff0c;是一个功能强大的基于节点的着色器开发工具&#xff0c;允许开发者在 Unity 中轻松创建和管理复杂的 Shader。 主要功能和特点 基于节点的编辑器&#xff1a; • 提供直观的可视化界面&#xff0c;减少手写 Sh…

Elasticsearch使用(2):docker安装es、基础操作、mapping映射

1 安装es 1.1 拉取镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:7.17.3 1.2 运行容器 运行elasticsearch容器&#xff0c;挂载的目录给更高的权限&#xff0c;否则可能会因为目录权限问题导致启动失败&#xff1a; docker r…

scroll-view 实现滑动显示,确保超出正常显示,小程序app,h5兼容

在uniapp 开开发的项目中&#xff0c;滑动操作是很多的 1.在插件市场使用了几款插件&#xff0c;但是都不太好用&#xff0c;要么是 显示的tab 过多&#xff0c;滑动到最后一个&#xff0c;当前显示那个跑左边显示不全&#xff0c;要么是滑动到最后一个后面的无法自动滑动&…

SpringBoot Maven快速上手

文章目录 一、Maven 1.1 Maven 简介&#xff1a;1.2 Maven 的核心功能&#xff1a; 1.2.1 项目构建&#xff1a;1.2.2 依赖管理&#xff1a; 1.3 Maven 仓库&#xff1a; 1.3.1 本地仓库&#xff1a;1.3.2 中央仓库&#xff1a;1.3.3 私服&#xff1a; 二、第一个 SpringBoot…

funcaptcha 验证码逆向协议通过,算法实现

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01;