YOu can overload the -> or the * operator, which is callled the reference and dereference operator separtely...
You can overload the operator if you see necessary, here is soem cdoe shows how you can use it.
the header file
/**
* file
* Screen.h
*
* description:
* this is the header file definition of the screen and the ScreenPtr
*/
class Screen
{
public:
void move(int x, int y);
private:
protected:
};
class ScreenPtr
{
public:
ScreenPtr(Screen *ptr_) : ptr(ptr_) { }
Screen& operator*() { return *ptr; }
Screen* operator->() { return ptr; }
~ScreenPtr() { delete ptr; } // we shall we define the operator as well
private:
Screen *ptr;
protected:
};
the cpp implementation file.
/**
* file
* Screen.h
*
* description:
* this is the header file definition of the screen and the ScreenPtr
*/
#include "stdafx.h"
#include "Screen.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
void Screen::move(int x, int y)
{
cout << "Screen move -> x: " << x << " y: " << y << endl;
}
/**
* point is examined to determine its type, if point is a pointer of some class type, the statement use the semantics of the built-in members
* access operator new . if point is an object or a reference of some class type, the class is examined for an overloaded member access operator arrow.
*/
void test_use_of_ptr_overload()
{
Screen *screen = new Screen();
ScreenPtr ptr(screen);
ptr->move(1, 2);
}
one important thing about the semantic of the -> and * operator.
point is examined to determine its type, if point is a pointer of some class type, the statement use the semantics of the built-in members. access operator new . if point is an object or a reference of some class type, the class is examined for an overloaded member access operator arrow.
本文介绍了一个C++示例,展示了如何为智能指针类ScreenPtr重载解引用操作符(*)和成员访问操作符(->)。通过这些重载,可以像使用普通指针一样使用ScreenPtr,例如调用其指向的对象的方法move()。
6859

被折叠的 条评论
为什么被折叠?



