【C++ 自写String】

CString.hpp

#include <iostream>
#include <string.h>

#pragma warning(disable:4996)
using namespace std;

class CString {
private:
	int len;
	char* data;

public:
	CString():data(nullptr),len(0) {
		cout << "0空构造\n";
	}

	CString(const char* _data) 
	{
		if (!_data) {
			len = 0;
			data = new char(1);
			*data = '\0';
			cout << "1空构造\n";
		}
		else {
			len = (int)strlen(_data);
			data = new char[strlen(_data) + 1];
			memset(data, 0, len + 1);
			strcpy(data, _data);
			cout << "char*构造\n";
		}
		
	}
	const char* getValue() const {
		return data;
	}

	int getLength() const{
		return len;
	}

	CString (const CString& str)
	{
		len = str.getLength();
		data = new char[len+1];
		memset(data, 0, len + 1);
		strcpy(data, str.getValue());
		cout << "str构造\n";
	}

	CString& operator=(const CString & str)
	{
		if (this == &str) {
			return *this;
		}
		len = str.getLength();
		delete[] data;
		data = new char[len + 1];
		strcpy(data, str.getValue());
		return *this;
	}

	CString operator+(const CString &str) const
	{
			CString nstr;
			nstr.len = this->len + str.getLength();
			nstr.data = new char[nstr.len + 1];
			strcpy(nstr.data, (*this).data);
			strcat(nstr.data, str.getValue());
			return nstr;
	}

	~CString() {
		delete[] data;
	}
	

};



class String {
private:
	char* data; // 存储字符数组的指针
public:
	String(const char* str = "") : data(new char[strlen(str) + 1]) {
		strcpy(data, str);
	}

	~String() {
		delete[] data;
	}

	const char* getData() const {
		return data;
	}
};

Shape.hpp

#include<iostream>


class Shape {
public:
	virtual double printArea() = 0;
};

class Circle :public Shape {
private:
	double r;
public:
	Circle(double _r) { r = _r; }
	virtual double printArea() {
		return r * r * 3.14159;
	}
};

class Rectangle :public Shape {
private:
	double w, h;
public:
	Rectangle(double _w, double _h) { w = _w; h = _h; }
	virtual double printArea() {
		return w * h;
	}
};

class Triangle :public Shape {
private:
	double w, h;
public:
	Triangle(double _w, double _h)
	{
		w = _w;
		h = _h;
	}
	virtual double printArea() {
		return w * h /2;
	}
};

cmain.cpp

#include "CString.hpp"
#include "Shape.hpp"
#include <vector>

int main() 
{
#if 1
	CString s1("123");
	CString s2(s1);
	CString s3 = s1 + s2;
	CString s4;
	s4 = s3;
	cout << s4.getLength() << "," << s4.getValue() << endl;

	vector<Shape*> ss;
	Shape* c = new Circle(2.1);
	Shape* r = new Rectangle(4, 5);
	Shape* t = new Triangle(4,2);
	ss.push_back(c);
	ss.push_back(r);
	ss.push_back(t);
	for (auto v = ss.begin(); v != ss.end(); v ++) {
		cout<< "area:" << (*v)->printArea() << endl;
		Shape* ptr = *v;
		delete ptr;
		ptr = nullptr;
	}
	ss.erase(ss.begin(), ss.end());
#endif
	return 0;
}

在这里插入图片描述

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

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

相关文章

爬取咚漫漫画

一、数据来源分析1.确定自己的需求&#xff1a;采集哪个网站的上面的数据内容正常的访问流程&#xff1a;1.选中漫画--->目录页面 &#xff08;请求列表页面&#xff0c;获取所有的章节链接&#xff09;2.选择一个漫画内容--->漫画页面 &#xff08;请求章节链接&#xf…

Java简单程序设计

前言 Java简单的程序设计实验&#xff0c;分享记录一下。 程序题目及实现 1. 输入一个整数&#xff0c;判断是奇数还是偶数。 package java_1022;import java.util.Scanner;public class java01 {public static void main(String[] args) {int num;Scanner in new Scanner…

[计算机提升] 切换(域)用户

4.14 切换(域)用户 4.14.1 为什么要切换用户 在Windows系统中&#xff0c;切换用户的主要目的是为了实现多用户共享同一台计算机的便利和安全。当多个人需要使用同一台计算机时&#xff0c;每个人可以登录自己的用户账户&#xff0c;这样可以避免互相干扰和混淆数据。 以下是…

算法基础学习|双指针算法

双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类&#xff1a;(1) 对于一个序列&#xff0c;用两个指针维护一段区间(2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并…

数据结构之最优二叉树

数据结构之最优二叉树 1、最优二叉树2、哈夫曼编码 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0c;分析和研究计算机加工的数据的特性&#xff0c;以便为应用所涉及的数…

分辨率 时钟频率 lane速率计算

PCLK: pixel clock(像素频率) 计算方法如下&#xff1a; 以1920x1080p/60hz为例&#xff0c;total pixel&#xff1a;2200&#xff0c;total line&#xff1a;1125&#xff0c;filed rate&#xff1a;60Hz&#xff0c;那么&#xff1a;PCLK 2200*1125*60 148.5MHz&#xff1b…

Vue-35、Vue中使用ref属性

1、ref属性 2、代码 <template><div id"app"> <!-- <img alt"Vue logo" src"./assets/logo.png">--><h1 v-text"msg" ref"title"></h1><button click"showDOM" ref&…

gdzwfw某省公共资源交易平台逆向学习

声明&#xff1a;本文中网站仅为学习技术使用&#xff0c;请勿暴力爬取数据。 学习地址&#xff1a;aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c 此网站采用请求头反爬&#xff0c;难点是请求头中几个参数是如何生成的&#xff08;别问为什么知道是请求头&#xff0c;一…

推荐系统算法 协同过滤算法详解(二)皮尔森相关系数

目录 前言 协同过滤算法(简称CF) 皮尔森(pearson)相关系数公式 算法介绍 算法示例1&#xff1a; 算法示例2 前言 理解吧同胞们&#xff0c;实在是没办发把wps公式复制到文章上&#xff0c;只能截图了&#xff0c;我服了&#xff01;&#xff01;&#xff01; 协同过滤算法…

pytestallure分析redis的数据并动态生成testCase报告

1.pytest.mark.parametrize pytest.mark.parametrize 是一个pytest的装饰器&#xff0c;它可以用于将参数传递给测试函数。使用 pytest.mark.parametrize 装饰器时&#xff0c;需要在装饰器中指定参数名称和参数值。对于多个参数&#xff0c;可以使用多个装饰器。 下面是一些…

ZXing开源库生成二维码

引言 二维码&#xff08;QR Code&#xff09;作为一种快速、高容量、高密度的矩阵条码&#xff0c;已经在各行各业得到广泛应用。ZXing&#xff08;Zebra Crossing&#xff09;是一款由Google开源的Java二维码生成和解析库&#xff0c;提供了丰富的功能和易于使用的API。本篇博…

sqlmap使用教程(5)-信息获取

MySQL数据库 -b&#xff0c;用来获取数据库标识 --hostname&#xff0c;可以获取数据库服务器的主机名 -current-user&#xff0c;用来获取当前连接数据库的用户名 --users&#xff0c;获取数据库管理系统中的所有用户 --passwords&#xff0c;可以获取数据库用户密码的哈希值…

接口文档管理工具(yapi的使用)

文章目录 一、API管理工具二、yapi 接口管理工具功能权限管理项目管理页面功能接口接口创建接口配置管理界面 动态成员管理数据管理设置 三、 docker安装yapi三、使用流程四、参考 一、API管理工具 [推荐-官方描述]使用 YApi 管理 API 文档&#xff0c;测试&#xff0c; mock …

【C++干货铺】 RAII实现智能指针

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 为什么需要智能指针&#xff1f; 内存泄漏 什么是内存泄漏&#xff0c;内存泄露的危害 内存泄漏的分类 堆内存泄漏&#xff08;Heap leak&#xff09; 系统资…

LIO-SAM 论文阅读

论文链接 LIO-SAM 0. Abstract 提出了一种通过平滑和映射进行紧耦合激光雷达惯性里程计的框架 LIO-SAM&#xff0c;它实现了高精度、实时的移动机器人轨迹估计和地图构建 LIO-SAM 在因子图上制定激光雷达惯性里程计&#xff0c;允许将多种相对和绝对测量&#xff08;包括闭环…

k8s-基础知识(Pod,Deployment,ReplicaSet)

k8s职责 自动化容器部署和复制随时扩展或收缩容器容器分组group&#xff0c;并且提供容器间的负载均衡实时监控&#xff0c;即时故障发现&#xff0c;自动替换 k8s概念及架构 pod pod是容器的容器&#xff0c;可以包含多个container pod是k8s最小可部署单元&#xff0c;容器…

理解分布式存储的真实成本 - 10PB的硬件和软件

我们最近与一家大型银行的首席信息官进行了一次对话。他们是全球系统性重要银行之一——规模极其庞大。这位CIO决定将MinIO引入为数据分析计划的对象存储。这个部署从抵押贷款、交易和新闻平台收集数据&#xff0c;以运行Spark和其他分析工具&#xff0c;为银行提供洞察力。Min…

【C语言】【插入排序】

void InsertSort(int* a, int n) {int end 0, tmp 0;for (int i 0;i < n - 1;i){end i;tmp a[end 1];while (end > 0){if (a[end] > tmp){a[end 1] a[end];--end;}elsebreak;}a[end 1] tmp;} }逻辑解释&#xff1a; 变量end代表某次循环&#xff0c;要比较…

学习笔记-李沐动手学深度学习(三)(10-11,隐藏层、多层感知机、激活函数、模型超参数选择、欠过拟合)

总结 多体会&#xff08;宏观、哲学&#xff09; 【深度学习的核心】首先是要模型足够大&#xff0c;在此基础上通过各种手段 来控制模型容量&#xff0c;使得最终得到较小的泛化误差 【一般深度学习特指神经网络 这一块】 【学习的核心是要学习 本质上不变的那些核心思想&a…

MySql必知必会

41.undo log、redo log、 bin log的作用是什么&#xff1f; undo log 基本概念 undo log是一种用于撤销回退的日志&#xff0c;在数据库事务开始之前&#xff0c;MySQL会先记录更新前的数据到 undo log日志文件里面&#xff0c;当事务回滚时或者数据库崩溃时&#xff0c;可以…