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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值