首页 > 其他分享 >重载成员访问运算符

重载成员访问运算符

时间:2023-04-05 23:46:36浏览次数:51  
标签:return cout Data 运算符 访问 重载 getData data

#include <iostream>

using std::cout;
using std::endl;

class Data
{
public:
    Data(int data = 0)
    : _data(data)
    {
        cout << "Data(int  = 0)" << endl;
    }

    int getData() const
    {
        return _data;
    }

    ~Data()
    {
        cout << "~Data()" << endl;
    }
private:
    int _data;
};

class SmartPointer
{
public:
    SmartPointer(Data *pdata)
    : _data(pdata)
    {
        cout << "SmartPointer(Data *)" << endl;
    }

    //重载箭头访问运算符
    Data *operator->()
    {
        return _data;
    }

    //解引用运算符的重载
    Data &operator*()
    {
        return *_data;
    }

    ~SmartPointer()
    {
        cout << "~SmartPointer()" << endl;
        if(_data)
        {
            delete _data;
            _data = nullptr;
        }
    }
private:
    Data *_data;
};

class ThirdLayer
{
public:
    ThirdLayer(SmartPointer *psl)
    : _sl(psl)
    {
        cout << "ThirdLayer(SmartPointer *)" << endl;
    }

    SmartPointer &operator->()
    {
        return *_sl;
    }

    ~ThirdLayer()
    {
        cout << "~ThirdLayer()" << endl;
        if(_sl)
        {
            delete _sl;
            _sl = nullptr;
        }
    }
private:
    SmartPointer *_sl;
};

int main(int argc, char **argv)
{
    //pointer可以看成是智能指针
    SmartPointer pointer(new Data(10));//pointer是个栈对象
    /* pointer.operator->()->getData(); // 还原的写法 */
    cout << "pointer->getData() = " << pointer->getData() << endl;
    /* pointer.operator*().getData(); */
    cout << "(*pointer).getData() = " << (*pointer).getData() << endl;

    /* ThirdLayer tl(new SmartPointer(new Data(20))); */
    /* tl.operator->().operator->()->getData(); */
    /* cout << "tl->getData() = " << tl->getData() << endl; */

    return 0;
}

标签:return,cout,Data,运算符,访问,重载,getData,data
From: https://www.cnblogs.com/MyXjil/p/17291307.html

相关文章

  • 解决在创建springboot项目中遇到:Error:(3, 32) java: 无法访问org.springframework.bo
    解决在创建springboot项目中遇到:Error:(3,32)java:无法访问org.springframework.boot.SpringApplication File--->ProjectStructure    选择对应版本        File--->Settings--->Build,Execution,Deployment    修改对应版本 ......
  • 20230405-Python运算符-day3
    运算符4月4日算数运算符赋值运算符复合赋值运算符⽐较运算符逻辑运算符算数运算符符号描述实例+加print(1+1)输出结果为2-减print(1-1)输出结果为0*乘print(2*2)输出结果为4/除print(4/2)输出结果为2//整除print(9//4)输出结果......
  • 4.运算符号
    常见运算符赋值运算符增量运算符逻辑运算符常见运算符+、-、*、、/、%/:除以结果为正数%:获得余数 赋值运算符=,+=,-=,/=,%=,<<=,>>=,&=,^=,!=f+=1 //为f加1,f为加1后的值 增量运算符++,--++i:先i的值加一i--:先显示i的值,后加一 逻辑运算符&&//逻辑与,1......
  • 在windows下通过xshell来实现跳板机配置pycharm环境和xftp文件访问
    xshell实现跳板机先使用xshell实现跳板机,并将对应的跳板机窗口打开。跳板机使用xshell的隧道功能实现,选择作为中转的服务器B的属性。选择隧道选择添加侦听端口为本机A的,后面通过localhost:7777进行访问。这个端口可以自己设置不同的。目标主机就是通过服务器B作为跳板机,要......
  • Springboot 系列 (29) - Springboot+HBase 大数据存储(七)| Springboot 项目通过 Phoeni
    Phoenix是HBase的开源SQL皮肤,通过Phoenix可以使用标准JDBCAPI代替HBase客户端API来创建表,插入数据和查询HBase数据。Phoenix会把SQL编译成一系列的Hbase的scan操作,然后把scan结果生成标准的JDBC结果集,其底层由于使用了Hbase的API,协处理器,过滤器。Pho......
  • 逍遥自在学C语言 | 关系运算符
    前言一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、构成和表示方式关系运算符的作用是判断符号两边大小的关系C语言中的关系运算符主要有六个,如下表所示运算符名称示例......
  • 通过阿里云ECS服务器公网ip访问tomcat,nginx
    一、概述1、操作系统:centos72、安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用。3、tomcat版本:apache-tomcat-7.0.92二、操作步骤1、启动tomcat;2、进入阿里云控制台,选择安全组,配置安全组规则(添加80,8080端口规则);    3、按图示配置完成,点击......
  • blockchain | truffle console 访问合约
    blockchain|truffleconsole访问合约今天用truffleconsole来测试昨天部署的合约。一开始报错invalidopcode,查了一下还是创世区块配置的问题,这里贴上最新的配置文件:{"config":{"chainId":15,"homesteadBlock":0,"byzantiumBlock":0,......
  • silverlight/Flash 跨域访问给新手的一点经验
      尝试向URI“http://www.luozhuang.com/web1/WebService.asmx”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于SOAP服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送SOAP相关......
  • Redis未授权访问Getshell
    漏洞成因有些redis绑在0.0.0.0:6379,没有开启验证或者没有设置对未知ip来源进行限制以及默认的空密码就导致了redis默认访问但是这个普遍的漏洞极可能造成后门植入getshell,也可能造成反弹shell权限维持,甚至会造成ssh直接免密连接服务器开始复现搭建环境服务器操作系统为ubuntu......