c++ - the overloaded pointer operator

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++)