C++语法基础--重载operator->箭头操作符
来源:互联网 发布:工作沟通软件 编辑:程序博客网 时间:2024/05/16 19:21
格式:
class B
{
public:
<type> operator->();
<type> fn();
};
B b;//或者B *b;
eg:
#include <iostream>
using namespace std;
class A
{
public:
void f()
{
cout<<"A::f()"<<endl;
}
};
class B
{
public:
void f()
{
cout<<"B::f()"<<endl;
}
A* operator->()
{
return &a;
}
private:
A a;
};
class C
{
public:
void f()
{
cout<<"C::f()"<<endl;
}
B& operator->()
{
return b;
}
private:
B b;
};
class D
{
public:
void f()
{
cout<<"D::f()"<<endl;
}
C* operator->()
{
return &c;
}
private:
C c;
};
int main()
{
D d;
d->f(); //输出C::f(),因为d是对象且重载了operator->所以返回C*,然后是正常的指针调用
D *d1=new D;
d1->f(); //输出D::f(), 因为d1是指针,所以直接是正常的指针调用
C c;
return 0;
}
class B
{
public:
<type> operator->();
<type> fn();
};
B b;//或者B *b;
b->fn();
*如果b是某一类类型的指针,则这个语句使用内置成员访问操作符箭头的语义;
* 如果b是某一个类类型的对像或引用,则查找这个类的重载的成员操作符箭头
*返回类型必须是一个类类型的指针,或者是定义了自己的箭头操作符的类类型对象。
*如果返回值是另一个类的对象或引用,则递归调用该过程,直到返回的是指针类型或语句错误eg:
#include <iostream>
using namespace std;
class A
{
public:
void f()
{
cout<<"A::f()"<<endl;
}
};
class B
{
public:
void f()
{
cout<<"B::f()"<<endl;
}
A* operator->()
{
return &a;
}
private:
A a;
};
class C
{
public:
void f()
{
cout<<"C::f()"<<endl;
}
B& operator->()
{
return b;
}
private:
B b;
};
class D
{
public:
void f()
{
cout<<"D::f()"<<endl;
}
C* operator->()
{
return &c;
}
private:
C c;
};
int main()
{
D d;
d->f(); //输出C::f(),因为d是对象且重载了operator->所以返回C*,然后是正常的指针调用
D *d1=new D;
d1->f(); //输出D::f(), 因为d1是指针,所以直接是正常的指针调用
C c;
c->f(); //输出A::f(),因为c是对象且重载了operator->所以返回B&,而B重载了operator->,
//所以再返回A*,最后是正常的指针调用
return 0;
}
运行结果:
- C++语法基础--重载operator->箭头操作符
- C++,重载输出操作符<<, cout.operator()
- 【C++】operator关键字(重载操作符)
- 重载箭头操作符
- 重载箭头操作符
- 箭头(->)操作符重载
- operator 操作符重载
- 重载operator操作符
- C++ 操作符重载 operator = 、operator <
- C++ 操作符重载 operator = 、operator <
- c++重载箭头操作符
- C++重载箭头操作符
- C++重载箭头操作符
- C++重载箭头操作符
- C++,重载输出操作符<<, cout.operator()是什么东东?
- C++ operator关键字(重载操作符)
- C++ operator关键字(重载操作符)
- operator C++ 操作符重载
- 在WEB中为页面加载或查询时间添加loading效果
- Eclipse3.3_(windows7)连接远程hadoop(RedHat.Enterprise.Linux.5)并测试程序
- CUDA,我来了。
- jsp 中的param的应用
- 0欧姆电阻的用途
- C++语法基础--重载operator->箭头操作符
- 坚石诚信ET系列加密锁应用保护技巧
- Android距离感应器P-Sensor浅析
- linux下用select实现非阻塞socket
- Opera Mobile调试手机版网页如何清空缓存
- YCbCr-YUV
- (一)编译Linux内核
- 整天写微博,最近竟然不会写博客了...
- oracle的substr函数的用法