关于c++操作符重载的问题

gjlstc 2008-11-06 07:58:19
书上定义了一个动态数组类
class Array
{
T *alist;
int size;
void Error(ErrorType error,int badIndex=0)const;
public:
Array(int sz=50);
Array(const Array<T>&a);
~Array(void){delete [] alist;};
Array<T> &operator =(const Array<T>& rhs);
T& operator[](int i);
operator T*(void)const;
int ListSize(void)const;
void Resize(int sz);
};

其中有个一个操作符重载
Array<T>::operator T* (void) const
{
return alist; // 返回当前对象中私有数组的首地址
}

说是 看不懂是什么意思也 应该怎么用呢?
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenheliang881 2008-11-07
  • 打赏
  • 举报
回复
mark
编程-鸟人-_-- 2008-11-07
  • 打赏
  • 举报
回复
Up!
太乙 2008-11-06
  • 打赏
  • 举报
回复
ls 说完了,我来替大家接分!!
梦之安魂曲 2008-11-06
  • 打赏
  • 举报
回复
这里把T*看作一个操作符。如(char*)(p);里的(char*)(p)就看做指针转换符。那operator T*(*void) const 就是操作符T*的重载。
jia_xiaoxin 2008-11-06
  • 打赏
  • 举报
回复
重载指针转换操作符,将Array类的对象名转换为T类型的指针,
指向当前对象中的私有数组。
因而可以象使用普通数组首地址一样使用Array类的对象名

Array<T>::operator T* (void) const
{
return alist; // 返回当前对象中私有数组的首地址
}
如果你定义了一个对象
Array<int> A(20);

那么你就可以这样使用
int * a = A;

其中alist是类内部分配的一个数组的首地址
所以就相当于a指向了类内部分配的数组的首地址。
study_live 2008-11-06
  • 打赏
  • 举报
回复
重载()操作符

class Array<int> ca;
int n = ca(); //调用Array<T>::operator T* (void) const
gjlstc 2008-11-06
  • 打赏
  • 举报
回复
就是不用调用直接可以转换了么?
wwwypy 2008-11-06
  • 打赏
  • 举报
回复
楼上说的对,是类型转化。
lann64 2008-11-06
  • 打赏
  • 举报
回复
跟普通数组名转换成首元素指针用法一样。
帅得不敢出门 2008-11-06
  • 打赏
  • 举报
回复
用于类型转换
Array<T>可以转换成T* 类型

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧