operator ->重载是怎么做到的?

https://stackoverflow.com/questions/8777845/overloading-member-access-operators-c

struct client
    { int a; };

struct proxy {
    client *target;
    client *operator->() const
        { return target; }
};

struct proxy2 {
    proxy *target;
    proxy &operator->() const
        { return * target; }
};

void f() {
    client x = { 3 };
    proxy y = { & x };
    proxy2 z = { & y };

    std

并非如普通操作符一样在class内部定义一个函数做重载,而是通过一个代理类.

原文地址:https://www.cnblogs.com/sdu20112013/p/11440680.html

时间: 2024-11-04 05:56:45

operator ->重载是怎么做到的?的相关文章

operator重载运算符

1.重载运算符的函数一般格式如下 函数类型    operator  运算符名称    (形参表列) {对运算符的重载处理} 例如,想将“+”用于Complex(复数)的加法运算,函数的原型可以是这样的: Complex operator + (Complex & c1,Complex &c2); operator+函数表示对运算符+重载.其中,operator是关键字,专门用于定义重载运算符的函数的,运算符名称就是C++提供给用户的预定运算符. 注意:函数名是由operator和运算符组

c++学习记录:operator = 重载

<effective c++>的确是一本神书,阅读起来的感觉可以用酣畅淋漓来形容,似乎很多以前没有在意的小细节都变得豁然开朗了起来,在条款10中,scott建议我们重载操作符'='时,返回一个*this的引用. 赋值,我们往往可以写作连锁形式: int x,y,z; x = y = z = 10; 赋值采用了右结合律,所以以上连锁赋值被解析为: x = (y = (z = 10)); 首先15赋值给z,然后z更新后,赋值给y,y更新后赋值给x; 所以为了实现"连锁赋值",赋

operator重载的使用

C++的大多数运算符都可以通过operator来实现重载. 简单的operator+ #include <iostream> using namespace std; class A { public: A(int x){i=x;} int i; A &operator+(A &p) { this->i+=p.i; return *this; } }; void main() { A a(10),b(20),c(0); c=a+b; cout<<c.i<

编写高质量代码——重载operator=的标准三步走

CString& CString::operator=(const CString& str){   if(this == &str)       //1.自赋值检查       return *this;          if(pChar!=NULL)       //2.释放原有空间     delete[]  pCahr;   pChar = new char[strlen(str.pChar)+1]; // 2.申请新空间   strcpy(pChar, str.pCha

[C/C++]_[操作符重载operator type()和operator()的区别]

场景: 1.看到WTL的CWindow源码时会发现这样的operator重载,仔细看会发现它并不是重载()操作符. operator HWND() const throw() { return m_hWnd; } 如果重载()操作符,应该是,返回值HWND应该在operator的左边,而且应该有两个括号() HWND operator ()() const throw() { return m_hWnd; } 这种类型的操作符重载应该是type conversion operator(类型转换操

[019]转--C++ operator关键字(重载操作符)

原博客:http://www.cnblogs.com/speedmancs/archive/2011/06/09/2076873.html operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的). 一.为什么使用操作符重载? 对于系统的所有操作符,一般

C++的重载操作符(operator)介绍(转)

本文主要介绍C++中的重载操作符(operator)的相关知识. 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator=)视为一个函数名. 使用operator重载运算符,是C++扩展运算符功能的方法.使用operator扩展运算符功能的原因如下: 使重载后的运算符的使用方法与重载前一致扩展运算符的功能只能通过函数的方式实现(实际上,C++中各种"功能"都是由函

c++ operator

这篇博文是以前很久写的,贴在我的早期一个blog中,今天google一下,发现还真有不少人转载,可惜并不注明出处.那时觉得operator比较好玩.C++有时它的确是个耐玩的东东.operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换). 1.operator overloading C++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示 [cpp

操作符(++,+,+=,小于号,(),--等)重载

 1. 操作符(++,+,+=,小于号等)重载 新建QT项目,编写头文件 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include<QLabel> namespace Ui { class Dialog; } //编写自己的Label class myLabel { public: //一定要是共有的,才可以被调用 QLabel *ql; int cx; int cy; myLabel() { ql=new QL