关于C++操作符重载之"->"和"*"
来源:互联网 发布:无限流量软件下载 编辑:程序博客网 时间:2024/06/06 01:56
今天在android的代码里面看到了sp,这里简单写了下关于操作符重载的例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* Define Screen class
*/
class Screen
{
public:
Screen(){}
Screen(int l, int r, int t, int b): m_left(l), m_right(r), m_top(t), m_bottom(b) {}
void show_screen() { printf("@hk %d, %d, %d, %d/n", m_left, m_right, m_top, m_bottom); }
private:
int m_left;
int m_top;
int m_right;
int m_bottom;
};
/*
* Define pointer class of Screen
*/
template <typename T>
class ScreenPtr{
public:
ScreenPtr(T *ptr) : m_ptr(ptr) {}
~ScreenPtr() { delete m_ptr; }
void operator=(T *ptr) { m_ptr = ptr; }
T& operator* () { return *m_ptr; }
T* operator->() { return m_ptr; }
private:
T *m_ptr;
};
//////////////////////////////////////////////////////////////////////////
class massage_data
{
public:
massage_data(char *data_ptr) : m_data_ptr(data_ptr) {}
void print_data() { printf("@hk.%s(%d) %s /n", __FILE__, __LINE__, (char*)m_data_ptr); }
private:
char *m_data_ptr;
};
template <typename T>
class StrClassPtr
{
public:
/* construction function [10/29/2009 @h.k] */
StrClassPtr() : m_ptr(0) {}
StrClassPtr(T *object_ptr) : m_ptr(object_ptr) {}
/* destruction function [10/29/2009 @h.k] */
~StrClassPtr(){delete m_ptr;}
void operator=(T *ptr) { m_ptr = ptr; }
T& operator*() {return *m_ptr;}
T* operator->() { return m_ptr; }
private:
T *m_ptr;
};
/*
* 使用ScreenPtr类,封装了Screen类的指针,好处在于可以自己释放,使用者不用关系指针释放
* 引用: 是一个变量的别名.
*/
int main(int argc, char *argv[])
{
/*
*
*/
char str[] = "I would like to know the results!";
StrClassPtr<massage_data> msg_data_ptr;
msg_data_ptr = new massage_data(str); /* 这里如果不重载"="操作符将会出大问题 [10/30/2009 @h.k] */
msg_data_ptr->print_data();
/*
* use ScreenPtr class
*/
Screen *pscr = new Screen(10, 10, 800, 480);
Screen scr;
ScreenPtr<Screen> sptr(pscr);
ScreenPtr<Screen> sptr_first(new Screen(50, 50, 600, 480));
/*
* 通过new Screen(60, 60, 300, 240)分配一个新的Screen对象给sptr_second
* 实际就是这样一个动作"sptr_second.m_ptr = new Screen(60, 60, 300, 240)"
*/
ScreenPtr<Screen> sptr_second = new Screen(60, 60, 300, 240);
scr = *sptr; /* 重载操作符"*" [10/30/2009 @h.k] */
scr.show_screen();
sptr->show_screen(); /* 重载操作符"->" [10/30/2009 @h.k] */
sptr_first->show_screen();
sptr_second->show_screen();
return 0;
}
- 关于C++操作符重载之"->"和"*"
- 关于操作符“>>”和“<<”的重载
- 关于 操作符“<<”和“>>”重载的心得
- C/C++ 之 操作符重载
- 类型转换和操作符重载 (c#)
- 【C++】重载“<<"操作符和关键字static!!!
- 关于操作符重载
- 关于重载操作符
- C++之++和--操作符重载
- C++【操作符重载】
- c++::操作符重载
- C++:操作符重载
- 重载操作符>> 和 <<
- 关于<<和>>重载操作符 返回值的问题
- 关于拷贝构造函数和重载赋值操作符
- 《C++primer》操作符重载之CheckoutRecord相关
- C++_指针悬挂和赋值操作符的重载
- C++_指针悬挂和赋值操作符的重载
- windows server 2008 改密码(Remote Desktop)
- C/C++软件工程师笔试题
- 条形码图像识别技术
- Sina的CMS模型
- (转)常用C++网址
- 关于C++操作符重载之"->"和"*"
- 真正UTF-8与GB2312间的转换(兼容windows和Linux)
- Mac安装软件如何区分是UI安装,还是Command安装
- sql group by 与 having的用法 (转)
- 一如既往沉沦的一辈人,未觉醒的一辈人
- 用 Chukeh 结合 Delphi 实现大文件上传的断点续传
- gluPerspective函数和glOrtho函数的具体用法
- 笑话一则
- rpmbuild命令详解