关于C++操作符重载之"->"和"*"

【C++】操作符重载 注意:操作符重载可以当做==“自定义类的运算”== 1 为什么需要操作符重载? 对于基础的变量,int等,不需要重载就知道如何做,但是对于自定义类,就无法进行运算,比如复数类。 2 操作符重载总结 1)操作符重载本质上是一个函数,可以采用 友元函数或者成员函数实现。但是采用这两种函数传递参数、实现代码、应用场合均不同。 全局函数与成员函数的比较: 全局函数中不传递this指针,成员函数默认传递this指针,因此成员函数可以少一个参数; 成员函数可以访问私有变量,全局函数需要转化为友元函数才可以。 2)操 阅读详情

    今天在android的代码里面看到了sp,这里简单写了下关于操作符重载的例子

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * Define Screen class
 */
class Screen
{
public:
 Screen(){}
 Screen(int l, int r, int t, int b): m_left(l), m_right(r), m_top(t), m_bottom(b) {}
 
 void show_screen() { printf("@hk %d, %d, %d, %d/n", m_left, m_right, m_top, m_bottom); }

private:
 int m_left;
 int m_top;
 int m_right;
 int m_bottom;
};

/*
 * Define pointer class of Screen
 */
template <typename T>
class ScreenPtr{
public:
 ScreenPtr(T *ptr) : m_ptr(ptr) {}
 ~ScreenPtr() { delete m_ptr; }

 void operator=(T *ptr) { m_ptr = ptr; }
 T& operator* () { return *m_ptr; }
 T* operator->() { return m_ptr; }


private:
 T *m_ptr;

};
//////////////////////////////////////////////////////////////////////////

class massage_data
{
public:
 massage_data(char *data_ptr) : m_data_ptr(data_ptr) {}
 
 void print_data() { printf("@hk.%s(%d) %s /n", __FILE__, __LINE__, (char*)m_data_ptr); }
 
private:
 char *m_data_ptr;
};

template <typename T>
class StrClassPtr
{
public: 
 /*  construction function [10/29/2009 @h.k] */
 StrClassPtr() : m_ptr(0) {}
 StrClassPtr(T *object_ptr) : m_ptr(object_ptr) {}

 /*  destruction function [10/29/2009 @h.k] */
 ~StrClassPtr(){delete m_ptr;}
 
 void operator=(T *ptr) { m_ptr = ptr; }
 T& operator*() {return *m_ptr;}
 T* operator->() { return m_ptr; }
 
private:
 T *m_ptr;
};

/*
 * 使用ScreenPtr类,封装了Screen类的指针,好处在于可以自己释放,使用者不用关系指针释放
 *  引用: 是一个变量的别名.
 */
int main(int argc, char *argv[])
{
 /*
  *
  */
 char str[] = "I would like to know the results!";
 
 StrClassPtr<massage_data> msg_data_ptr;

 msg_data_ptr = new massage_data(str); /*  这里如果不重载"="操作符将会出大问题 [10/30/2009 @h.k] */

 msg_data_ptr->print_data();
 
 /*
  * use ScreenPtr class
  */
 Screen *pscr = new Screen(10, 10, 800, 480);
 Screen scr;

 ScreenPtr<Screen> sptr(pscr);
 ScreenPtr<Screen> sptr_first(new Screen(50, 50, 600, 480));
 /*
  * 通过new Screen(60, 60, 300, 240)分配一个新的Screen对象给sptr_second
  * 实际就是这样一个动作"sptr_second.m_ptr = new Screen(60, 60, 300, 240)"
  */
 ScreenPtr<Screen> sptr_second = new Screen(60, 60, 300, 240);

 scr = *sptr;      /*  重载操作符"*" [10/30/2009 @h.k] */
 scr.show_screen();  
 sptr->show_screen();    /*  重载操作符"->" [10/30/2009 @h.k] */
 sptr_first->show_screen();
 sptr_second->show_screen();

 return 0;
}

 

基于传统算法的半导体晶圆缺陷检测原理及代码(二) 了解基于传统算法的半导体晶圆缺陷检测原理和方法,对于深入理解半导体制造工艺和质量控制具有重要意义。在半导体制造技术持续创新的浪潮中,基于传统算法的缺陷检测技术也将不断演进,为半导体产业的高质量发展提供坚实可靠的技术支撑,确保在芯片制造的每一个环节都能精准识别和管控缺陷,推动半导体产业迈向更高的发展水平。基于传统算法的半导体晶圆缺陷检测技术在半导体制造的长期发展历程中扮演了重要角色,凭借其成熟的技术体系、较快的检测速度和相对较低的成本,在各个工艺阶段为保障晶圆质量发挥了关键作用。 阅读详情

相关推荐

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

初识c++(14)之仿函数(function-like class)和像指针的类(pointer-like class)"()"和“->”和“*”的重载

仿函数(function-like class) 仿函数就是一种看起来就像是函数的类,其实是对“()”的重载。 class Func{ public: void operator() (const string& str) const { cout<<str<<endl; } }; in...

请叫我少爷的博客 526

Vcenter虚拟机磁盘转换实战:如何用StarWind V2V将vmdk转为qcow2(附空间优化技巧)

本文详细介绍了如何使用StarWind V2V Converter将Vcenter中的vmdk虚拟机磁盘高效转换为qcow2格式,并提供了空间优化技巧。从准备工作、导出vmdk文件到转换过程中的性能调优,帮助管理员在迁移虚拟机时减少资源消耗,确保数据完整性和性能。

dell8的博客 202

【C++重载操作符与转换】赋值操作符

在 C++ 编程中,赋值操作符重载是一项强大且实用的特性。它允许我们为自定义类重新定义赋值操作的行为,使得对象之间的赋值操作更加灵活和符合业务逻辑。本文深入探讨 C++ 中赋值操作符重载的相关知识,从基础概念到实际应用,通过丰富的代码示例和详细的解释,全面掌握这一重要特性。

byte轻骑兵的技术小窝 2073

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2862

LiveReload:释放你的F5,实时预览HTML效果

一、liveReload插件开发背景Web前端开发人员在写页面时,如果修改了HTML or CSS,要想看效果通常的做法就是保存代码就得 Alt+Tab,切换到浏览器(当然,我知道很多开发人员是双屏操作不一定需要切换到浏览器),但是一定要F5刷新才能看自己刚写的代码有没有效果,没有效果就再切换到编辑器下修改,然后再切换到浏览器F5刷新看效果,还没有效果,就再继续修改,如此反复。时间久了,前端自动化...

Char_n的博客 2508

【C++重载操作符与转换】重载操作符的定义

在C++中,操作符重载(Operator Overloading)是一项强大的特性,它允许开发者为自定义类型(如类或结构体)重新定义内置操作符的行为。通过重载操作符,可以使自定义类型的对象表现得像内置类型一样自然,从而提升代码的可读性和可维护性。然而,操作符重载也是一把双刃剑,如果使用不当,可能会导致代码难以理解和调试。

byte轻骑兵的技术小窝 2078

Python实战:如何用高德API批量获取POI数据(附完整代码)

本文详细介绍了如何使用Python通过高德API批量获取POI数据,包括API基础准备、核心功能模块设计、高级功能实现及实战应用案例。文章提供了完整代码示例,帮助开发者高效解决商业网点分析、公共设施规划等实际项目中的数据采集需求。

stem5的博客 322

C++操作符重载

简要介绍了各种操作符的重载方式与实现

shadow_xwl的博客 5744

【keras】走近VGG16卷积神经网络

        VGG16是一个16层的卷积神经网络模型,输入数据的维度为224*224*3,即长宽均为224像素的RGB彩色图片,VGG16模型的权重由ImageNet训练而来。由于其具有简单实用的优点,因此,在图像分类和目标检测任务中得到了较为广泛的应用。 1.卷积神经网络的基本概念 1.1卷积         简单的将其理解为一种数学运算,具体的计算过程如下图所示:       ...

XYZ 1万+

微信小程序 - 最新详细实现“全局实时监听页面发生跳转“ 当页面跳转后立即捕捉并触发某个操作或调用处理函数,小程序整个项目无时无刻只要路由发生变化改变了就能监听,时刻检测页面URL变化(获取路由数据)

微信小程序,vue2,vue3,监听路由,如何监听路由发生变化,如何watch监听路由,怎么全局监听页面发生变化,实现当页面路由发生变化时执行一个函数,当路由变化时执行一些操作执行一段代码,怎么监听路由变化时触发一个函数,监听页面变化,页面间的跳转如何监听,页面跳转时怎么拿到路由及参数,页面路由变化时拿到参数和url,使用watch监听路由变化,页面跳转后怎么触发事件,怎么监听页面跳转,监听页面跳转并拿到路由url路径,小程序怎么全局定义一个专门监听路由的函数,小程序怎么无时无刻实时监听路由页面跳转,监听当

🏆 前端领域优质创作者 4474

c++重载操作符

c++支持重载的操作符有算术操作符+、-、*、/、%关系操作符==、!逻辑操作符!、&&、||位操作符赋值操作符下标操作符[]函数调用操作符()成员访问操作符->指针操作符*(解引用)、&(取地址)逗号操作符这些操作符按照操作数个数不同分为单目操作符、双目操作符、多目操作符单目操作符!、~、->、*(解引用)、&(取地址)双目操作符其他多目操作符()为什么要按这个分类?别急,继续看...

米碎师兄 2424

Python调用CANoe(1)(启动与停止,变量和信号读写)

CANoe因为其封闭性(Vector独有),开发的时候,有很多局限性;Python 因为其开源,容易上手,功能强大,那么Python 和 CANoe结合会产生怎样的火花呢?

蚂蚁小兵 4万+

C++操作符重载(不能被重载的操作符)

C++中的运算符: 名称 运算符 算数运算符 +、-、/、%、++、– 位操作运算符 &amp;amp;amp;、 逻辑运算符 !、&amp;amp;amp;&amp;amp;amp;、 比较运算符 &amp;amp;lt;、&amp;amp;gt;、&amp;amp;lt;=、&amp;amp;gt;=、==、!= 赋值运算符 =、+=、-=、*=、/=、%=、 其

ZWE7616175的博客 8349

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++中对成员访问操作符->的重载

转自:http://kelvinh.github.io/blog/2013/11/20/overloading-of-member-access-operator-dash-greater-than-symbol-in-cpp/ C++中对成员访问操作符->的重载 前几天在看《C++标准程序库》,看到智能指针 std::auto_ptr 的源码的时候,对于运算符 -> 的重载,我脑袋中

simply the best 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++ 操作符重载

输出操作符"<<" 和输入操作运算符">>" 在C++中,左移运算符<<可以和cout一起输出,因此也常被称为"流插入运算符",或"输出运算符"。 但实际上!<<本来没有这样的功能,之所以能和cout一起使用来输出数据,是因为此<<操作符被重载了 输出操作符"<<" cout是ostream类的对象,ostream类和cout都是在头文件 <iostream> 中声明的,ostream类将<<重载为其成员函数,

Chroniccandy的博客 2006

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++基本操作符重载

基本操作符重载基本操作符重载reference 基本操作符重载 操作符重载指的是将 C++ 提供的操作符进行重新定义,使之满足我们所需要的一些功能。 在 C++ 中可以重载的操作符有: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= >>= == != <= >= && ||

嵌入式与人工智能 3377

c++操作符重载

容器对象list和vector使用时遇到find函数报错,那么问题的最终解决方案在操作符重载,这里就顺便将操作符重载的相关内容都详细介绍一遍,并给出实例代码

河西~石头 1697

C++类的指针和操作符重载

一类的指针 1代码 #include &lt;iostream&gt; using namespace std; class CRectangle { int width, height; public: void set_values(int,int); int area(void) {return (width*height);} }; void CRe...

实践求真知 1413

Cpp_操作符重载

一、双目操作符的重载1.计算类双目操作符 形如L#R的表达式会被编译器处理为形如L.operator#(R)的成员函数的调用,该函数的返回值即为表达式的值。 形如L#R的表达式也可以被编译器处理为形如::operator#(L,R)的全局函数的调用,该函数的返回值即为表达式的值。 2.赋值类双目操作符 表达式的值是一个左值,而且它就是左操作数本身。 左操作数不能是常量,右操作数可以是常量。

Jerry的专栏 1370

C++类—重载操作符

重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号。如: [cpp] view plaincopy Sales_item operator+(const Sales_item &,const Sales_item &);   除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针

xietingcandice的专栏 2580

C++中前置操作符和后置操作符的重载

文章目录1 C++中前置操作符和后置操作符的重载1.1 前置操作符和后置操作符的原生语义1.2 ++操作符的重载1.3 前置++和后置++的真正区别 1 C++中前置操作符和后置操作符的重载 1.1 前置操作符和后置操作符的原生语义 下面的代码有区别吗?为什么? 在实际测试中发现,如上两行代码对应的汇编语句一摸一样。 我们需要知道如下事实: 现代编译器产品会对代码进行优化。 优化使得最终的二进...

木子皿--啥都不会的菜鸟 797

C++操作符重载深度解析

本文介绍了C++操作符重载的基本概念和使用方法。主要内容包括: 操作符重载的基本原理:通过函数重载机制,为自定义类型重新定义操作符的语义,使自定义类型能像内置类型一样使用操作符。重载方式可以是成员函数或全局函数(需包含自定义类型参数)。 常见操作符重载示例: 算术运算符(如+)重载 自增/自减运算符重载(区分前置和后置形式) 流操作符(<<)重载 赋值运算符(=)重载

lizz31的博客 724

C++中逗号操作符的重载

文章目录1 C++中逗号操作符的重载1.1 逗号操作符的原生语义1.2 重载逗号操作符 1 C++中逗号操作符的重载 1.1 逗号操作符的原生语义 逗号操作符(,)可以构成逗号表达式: 逗号表达式用于将多个子表达式连接为一个表达式。 逗号表达式的值为最后一个子表达式的值。 逗号表达式中的前N-1个子表达式可以没有返回值。 逗号表达式按照从左向右的顺序计算每个子表达式的值。 逗号表达式的示例:...

木子皿--啥都不会的菜鸟 1778

C++ 操作符重载Operator

这样,就会支持18+a的重载,可以看到有两个参数,因为不是成员函数,所以需要显式指定两个参数,int num为左侧类型,myInt m为右侧类型,这样当int res=18+a,根据参数类型调用指定的重载。是不合法的,没有与之匹配的重载,所以这里有着严格的要求,包括+号是二元操作符,只能有左右两个参数,你不能像这样int operator+(int num,int num1) 去定义它。操作符重载也是一样,有类型限制的,你调用的是哪个类对象的+号,它就会执行相应的这个类对应的重载代码。

d3582077的专栏 1248

详解【C++】重载(Overloading),包括函数重载和操作符重载

C++重载机制包括函数重载和运算符重载。函数重载允许同作用域内定义同名但参数列表不同的函数,支持通过参数数量、类型、顺序、const限定符等进行区分。运算符重载通过operator@函数实现,可重载算术、比较、赋值等运算符,但部分运算符(如.和::)不可重载。常见应用包括自定义类对象的加减运算(+)、输入输出(<<、>>)、下标访问([])、自增自减(++/--)等。重载机制增强了代码可读性和灵活性,但需注意避免二义性和正确实现运算符语义。

m0_53601985的博客 833
上一篇: 背完这444句,你的口语绝对不成问题了
下一篇: linux下如何模拟按键输入和模拟鼠标
WeekyHuang
博客等级 码龄21年 5粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值