基本运算符重载实例

运算符重载实例. C++程序,利用运算符的重载在VC下编译。 立即下载

Mystring.h

#include <iostream>
#ifndef __MYSTRING_H
#define __MYSTRING_H

class Mystring{
	friend void print(Mystring & oop);
	
public:
	/*空串  “”*/
	Mystring();
	Mystring(char *str);
	Mystring(Mystring &oop);
	~Mystring();
	Mystring& operator=(Mystring &oop);
public:/*[]操作符重载*/
	char& operator[](int index);
public:/*==,!=操作符重载*/
	bool operator==(Mystring &oop);
	bool operator==(const Mystring &oop);
	bool operator!=(const Mystring &oop);
	bool operator!=(Mystring &oop);
public:/*括号操作符重载*/
	char* Mystring::operator()(const char* str);
private:
	int str_len;
	char *str;
};
void print(Mystring & oop);

#endif
Mystring.cpp

#define _CRT_SECURE_NO_WARNINGS
#include "Mystring.h"
#include <iostream>
#include <cstring>
Mystring::Mystring()
{
	str_len = 0;
	this->str = new char[this->str_len + 1];
	strcpy(this->str, "");
}
Mystring::Mystring(char *str)
{
	if (str == NULL)
	{
		str_len = 0;
		this->str = new char[this->str_len + 1];
		strcpy(this->str, "");
	}
	else
	{
		this->str_len = strlen(str);
		this->str = new char[str_len+1];
		strcpy(this->str,str);
	}
}
/*拷贝构造函数*/
Mystring::Mystring(Mystring & oop)
{
	this->str_len = oop.str_len;
	this->str = new char[str_len + 1];
	strcpy(this->str,oop.str);
}
/*析构函数*/
Mystring::~Mystring()
{
	if (this->str != NULL)
	{
		delete this->str;
		this->str = NULL;
		this->str_len = 0;
		std::cout << "析构函数生效" << std::endl;

	}
}

/*输出字符串信息*/
void print(Mystring & oop)
{
	std::cout << oop.str << std::endl;
}

/*等号操作符重载*/
Mystring & Mystring::operator=(Mystring &oop)
{
	this->str_len = oop.str_len;
	this->str = new char[str_len + 1];
	strcpy(this->str, oop.str);
	return *this;
}
/*[]操作符重载*/
char& Mystring::operator[](int index)
{
	return this->str[index];
}
/*重载 == ,!=等操作*/
bool Mystring::operator==(Mystring &oop)
{
	if(this->str_len != oop.str_len)
	 return false;
	else
	{
		if (this->str_len == oop.str_len)
		{
			for (int i = 0; i < oop.str_len; i++)
			{
				if (this->str[i] != oop.str[i])
					return false;
				continue;
			}
			return true;
		}
		
	}

}
bool Mystring::operator==(const Mystring &oop)
{
	if (this->str_len != oop.str_len)
		return false;
	else
	{
		if (this->str_len == oop.str_len)
		{
			for (int i = 0; i < oop.str_len; i++)
			{
				if (this->str[i] != oop.str[i])
					return false;
				continue;
			}
			return true;
		}

	}
}
bool Mystring::operator!=(const Mystring &oop)
{
	if (this->str_len != oop.str_len)
		return true;
	else
	{
		if (this->str_len == oop.str_len)
		{
			for (int i = 0; i < oop.str_len; i++)
			{
				if (this->str[i] == oop.str[i])
					continue;
				else
					return true;
			}
			return false;
		}

	}
}
bool Mystring::operator!=(Mystring &oop)
{
	if (this->str_len != oop.str_len)
		return true;
	else
	{
		if (this->str_len == oop.str_len)
		{
			for (int i = 0; i < oop.str_len; i++)
			{
				if (this->str[i] == oop.str[i])
					continue;
				else
					return true;
			}
			return false;
		}

	}
}
/*括号操作符重载*/
char* Mystring::operator()(const char* str)
{
	this->str_len = strlen(str);
	this->str = new char[this->str_len + 1];
	strcpy(this->str,str);
	return this->str;
}

main.cpp验证:

#include <iostream>
#include "Mystring.h"
#include <cstring>
using namespace std;

class mfghj{
private:
	int sl;
	int bl;
};

int main()
{
	{
		Mystring oop1("baibai");
		const Mystring oop2("nihao");
		

		Mystring oop3;
		char* re = oop3("zaiganma");/*括号运算符验证*/
		cout<<re<<endl;
#if 0
		Mystring oop3 = oop2;//调用构造函数实现
		print(oop3);
		oop2 = oop1;//“等号作符验证   字符串复制操作,通过等号运算符重载实现”
		print(oop2);
		cout << oop2[0] << endl;//[]操作符重载验证
#endif
		cout << "判断两个对象:" << (oop1 == oop2) << endl;/*验证==*/
		cout << "判断两个对象是否不想等" << (oop1 != oop2) << endl;
	}
	
	/*string str1 = "nihao";
	string str2 = "nihao";
	if (str1 == str2)
	{
		cout << "相等" << endl;
	}
	else
		cout << "不想等" << endl;
		*/

	system("pause");
	return 0;
}






微信小游戏CE修改实战:从入门到精通(附防作弊思路) 本文深入探讨微信小游戏的安全攻防实战,重点分析CE修改、反编译和重打包等安全风险。通过详细的内存修改案例和代码保护方案对比,提供从客户端到服务端的全方位防护策略,帮助开发者构建有效的防作弊体系。 阅读详情

相关推荐

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 716

运算符重载实例

运算符重载的实例:1.模拟秒表:(重载自增运算符)class Time { public: Time( ){minute=0;sec=0;} Time(int m,int s):minute(m),sec(s){ } Time operator++( ); //声明前置自增运算符“++”重载函数 Time operator++(int); //声明后置自增运算符“++”...

Flora_SM的博客 1207

深入理解光流法外推雷达回波

背景介绍 鉴于本人实在太过疲惫和劳累,一些简单的便于理解的废话就不在记录,耗费两天时间研究了一下光流法,本帖用于记录学习过程中源码的难点细节。 使用光流预测的核心有两个利用多张连续回波图像(变分)或者相邻两张回波图(交叉相关,LK等)计算出光流场(速度矢量场),之后利用半拉格朗日方法进行外推。 半拉格朗日方法 三时间步半拉格朗日方法,其核心公式如下 但这个有点难理解,但看一维的图就很好理解 它的核心就是迭代求Am(位移矢量),如果理解困难的话,其实质上就是通过未来迭代(猜)出当前时刻的Am找到过去的假设

weixin_44695861的博客 6035

【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )

一、重载 等号 = 运算符 1、等号 = 运算符 与 拷贝构造函数 2、重载 等号 = 运算符 - 右操作数为 String 对象 3、不同的右操作数对应的 重载运算符函数 4、重载 等号 = 运算符 - 右操作数为 字符串指针 二、重载 下标 [] 运算符 三、完整代码示例 1、String.h 类头文件 2、String.cpp 类实现 3、Test.cpp 测试类 4、执行结果

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2242

专栏丨华为HN8145XR光猫获取超级管理员密码

摘要:本文详细介绍了华为HN8145xr光猫获取超级管理员权限的完整步骤。首先通过ONT使能工具补全shell,然后利用Telnet登录光猫后台进行操作。文章提供了多种获取超级密码的方法,包括配置文件解密、一键查询工具等,并针对联通光猫特别说明了默认密码格式(CUAdmin+后八位数字)。此外,还介绍了恢复出厂设置、修改SSID等实用操作,帮助用户完全掌控光猫设备。文末附有详细的命令行操作指南,适合有一定技术基础的用户参考。

8285

UCIe相关开源项目记录

目前找到的和UCIe协议有关的5个开源项目,如果也有正在做的朋友,欢迎私信交流

m0_64102565的博客 823

C++运算符的重载

使原有的运算符增加新的功能。所以运算符重载实质上是。

ntr851217的博客 1275

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

常见的运算符重载用法及示例

运算符重载是C++中的一项功能,允许用户自定义类的对象使用标准运算符(如+、-、*等)。通过运算符重载,你可以定义类对象之间的操作,使其更符合对象的语义。下面来讲讲比较常见的这六种运算符重载作用及代码示例,其它未在本文中讲过的运算符重载也应该可以通过学习本文自己推导出来。

qq_48482117的博客 1963

VEML7700环境光传感器原理图设计,已量产(光线传感器)

最近做便携显示设备的自动亮度调节模块,最终敲定了 VEML7700 这款数字光传感器 —— 一是它 0~120klx 的宽量程刚好覆盖 “暗室→户外强光” 的全场景,二是 Filtron™技术让它的光谱响应和人眼高度贴合,测出来的 “亮度” 更符合实际视觉感受,加上 O-Trim™技术把输出公差压到 10% 以内,省了不少后期校准的功夫。搭好电路后串口直接读 lx 数值,稳定性和精度都够,这篇聊聊这个模块的硬件设计细节。

不脱发的程序猿 605

5、自适应 RBF 神经网络控制方法解析

本文详细解析了基于RBF神经网络的多种自适应控制方法,包括针对函数未知、参数未知以及存在外部干扰的非线性系统的控制策略。通过李雅普诺夫稳定性理论设计自适应律,确保闭环系统稳定,并结合仿真示例和MATLAB代码实现,展示了方法的有效性。文章还对比了不同控制方法的适用场景,并给出了实际应用流程,为复杂系统控制提供了系统性解决方案。

ol789012的博客 75

C++编程实例-运算符重载

实验15 运算符重载【实验目的】通过本实验,掌握运算符重载的概念。【实验要求】熟练掌握运算符重载的使用技术。【实验内容】实现下面两个程序,注意“+”的重载用法。1)定义运算符重载函数为友元函数。#include#includeclass A{private:

Neil 1089

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

C#复习封装_运算符重载

【代码】C#复习封装_运算符重载。

2402_83809362的博客 577

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++运算符重载(类内、外重载)

1.概念   运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能。这个函数叫做运算符重载函数(常为类的成员函数)。 2.运算符重载的基本格式    返回值类型 类名::operator重载的运算符(参数表)    {    ……    }    operator是关键字,它与重载的运算符一起构成函数名。 3.运算符重载的两种方法 1.类内重载 #include <iostream> using namespa

u014583317的博客 7万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C++ | 重载运算符】一文弄懂C++运算符重载,怎样声明、定义运算符,重载为友元函数

👉本文主要介绍了为什么需要重载运算符,重载运算符有哪些限制,怎样声明、定义运算符函数,怎样将运算符重载为友元函数。

wkd_007的博客 8125

C++运算符重载以及友元

今天继续复习了C++,之前都没认真看过《C++ primer plus》,非常详细的一本书,而且适合查阅与学习。 1.重载 在C++中有很多运算符可以被应用到类与类之间、类与基本类型之间等,我们把这种方法叫做运算符重载,比如有两个类X的实例A和B,将加号(+)在该类中重载以后就能直接使用A+B这样的式子。 下面用《C++ primer plus》中一个重载的例子来说明. 这个例子是一个

请叫我AXin 1435

C++函数重载和运算符重载

一、运算符重载的几个问题 1、那些运算符可以重载(下述运算符可以重载) 算术运算符:+,-,*,/,%,++,-- ; 位操作运算符:&,|,~,^,<< , >> ; 比较运算符:> , < ,>= ,<= , == ,!= ; 逻辑运算符:! , && , || ; 赋值运算符:= ...

辰风的博客 1078

【C++】有关<运算符重载>的详细总结

端午特辑:今天笔记的内容是:总结运算符的重载。 运算符的重载,可以使得程序更加容易理解,便于我们对类对象进行操作。

翼同学 1037

C++运算符重载

如果不写赋值运算符重载函数,系统会自动生成,但是浅拷贝,一个字节一个字节的拷贝,对于占用资源的还是要自己写才好。对于类类型的使用运算符编译器是不知道要干嘛的就需要自己写函数,自己实现功能。要跟拷贝构造区分,拷贝构造是一个已经存在,给另一个初始化时进行的拷贝操作。日期 - 日期,日期 + 天数,日期 - 天数,这些都是有意义的。总结如果显示写了析构,就要显示写赋值运算符重载。对两个已经存在的类的对象进行赋值拷贝操作。运算符的作用,用于定义类的成员函数指针。就比如日期类的大小比较。

2401_83305953的博客 3664

c++运算符重载string类

一、 运算符重载的规则  运算符重载规则如下:  ①、 C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。  ②、 重载之后运算符的优先级和结合性都不会改变。  ③、 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。  不能重载

h674174380的博客 1万+

运算符重载

1什么是运算符重载所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。现在要讨论的问题是: 用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用“+”号进行两个复数的相加。在C++中不能在程序中直接用运算符“+”对复数进行相加运算。用户必

Panda的专栏 6719

函数 运算符 重载

回首谭浩强《C++程序设计》,开篇就来讲讲重载。         首先,函数重载。         特点如下:          ①重载函数的函数名相同。如求最大值的函数,int max(int a,int b)和double max(double a,double b)。          ②声明时形参的个数或类型或顺序必须至少有一项不同。          ③特别需要注意的是函数类型

ON THE WAY TO GEEK 1523

C++运算符重载(详解)

介绍一下C++运算符重载的概念及其原理以及限制范围和注意事项

weixin_43256263的博客 2631

C++重载运算符(一)如何重载运算符

刚学C++的同学都老是听说什么运算符重载,好像很高级的样子,那么嘿嘿嘿。 现在我们有一个时间类,我们要重载加减乘除运算符,以达到时间类之间的计算就跟数字加减乘除运算一样。 首先我们先从最简单的来: 时间类: 然后函数实现:(我们在此只贴出构造函数和Sum函数的实现,因为其他的用不到) 最后我们在主函数中定义CMyTime类来实现相加: 操作完成后我们看输出:

lishuzhai的专栏 2万+

各种重载运算符重载

一、基本定义 1、C++预定义的运算符只能用于基本数据类型的运算:整型、实型、字符型、逻辑型,但是不能作用于对象之间。 2、运算符重载的目的是扩展C++中提供的运算符的适用范围,使之能作用于对象。 3、运算符重载的实质是函数重载,可以重载为普通成员函数,也可以重载为成员函数。 4、根据实参的类型决定调用哪个运算符函数。 二、运算符重载的基本形式 不管什么样的,返回值是什么(除掉返回值...

fighting123678的博客 1623
上一篇: 操作符重载案例之字符串重载
下一篇: public继承
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值