📄 operator解引用的用法.txt
字号:
/*本程序选自thinking in c++ P510
*本程序在于说明operator->的使用方法。
*书上说:1.the operator-> is generally used when you want to make an object appear
* to be a pointer. an object like this is often called a smart pointer.
* 2.operator-> must be member function
* 3.operator-> must return an object(或是它的引用) that also has operator ->
or it must return pointer.
*/
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
class Obj {
static int i,j;
public:
void f() const { cout << i++ << endl;}
void g() const { cout << j++ <<endl;}
};
//static member definitions
int Obj::i = 1;
int Obj::j = 2;
// container:
class ObjContainer {
vector< Obj * > a;
public:
void add( Obj * obj ) { a.push_back( obj );}
friend class SmartPointer; //友元声明
};
class SmartPointer {
ObjContainer & oc;
int index;
public :
SmartPointer ( ObjContainer & objc ) : oc( objc ) { index = 0;}
//return value indicates end of list
bool operator ++() {
if ( index >= oc.a.size() ) return false;
if ( oc.a[++index] ==0 )return false;
return true;
}
bool operator ++(int){
return operator ++();
}
Obj * operator ->() const { //返回设计SmartPointer时想指向的对象的指针
assert( oc.a[ index ] != 0 );
return oc.a[ index ];
}
};
int main()
{
const int sz = 10;
Obj o[sz];
ObjContainer oc;
for ( int i = 0; i < sz ; i++)
oc.add( & o[i]);
SmartPointer sp(oc);
while ( sp++ )
{
sp->f();
sp->g();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -