this指针的疑问

xiaoc10 2009-04-13 02:13:52
先贴一点代码://可以分隔线后的问题
class CAAMShape : public CDVector, CAAMObject
{
CAAMShape::CAAMShape();
}

CAAMShape::CAAMShape() :
m_iNbPoints( 0 ),
m_szHostImage( "" ),
m_szASFVer( "1.0" ),
m_bAbsPointCoordinates( true )
{
m_pData = &((*this)[0]);
}

在类CAAShape中成员函数的定义中还有这样的代码:
for(int i=0;i<m_iNbPoints;i++) { //这里iNbPoints是某种形状总共的像素点的数目。我觉得x,y应该就是某个像素点的坐标。

x = (*this)[i];
y = (*this)[i+m_iNbPoints];
(*this)[i] = c00*x+c01*y;
(*this)[i+m_iNbPoints] = c10*x+c11*y;
}

*********************************************************************
我的问题就是(*this)[i],这样的操作让我很困惑。
和同学讨论的结果是,应该有重载[]这个操作符。可是我现在看源码的过程中还没找到,我也正在仔细的重看中。
不知道是否存在这种可能,就是没有重载[]这个操作符。那么这样的操作究竟意味着什么呢?
...全文
128 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
x是什么数据先,看清楚数据类型,才好判断(*this)[i]; 到底是那种用法.
tangshuiling 2009-04-13
  • 打赏
  • 举报
回复

任何诡异的操作都不能脱离语言本身的语法限制,想要(*this)[i]成立,必须有operator[]操作符
重载(基类中有也可以)
beyond071 2009-04-13
  • 打赏
  • 举报
回复
m_pData = &((*this)[0]); 

CAAMShape应该有一段连续的数据区,(*this)[0]是该数据区的第一个元素,使用&后,m_pData就成为指向该数据区首地址的指针!
这就类似vector,使用&vec[0]可以取得存放在vector中的数据区的首地址一样。

x = (*this)[i]; 
y = (*this)[i+m_iNbPoints];
(*this)[i] = c00*x+c01*y;
(*this)[i+m_iNbPoints] = c10*x+c11*y;

我的理解是:x是这些点的横坐标,y是这些点的纵坐标,它们在数据区是先放着m_iNbPoints个x坐标,后放着m_iNbPoints个y坐标;
后面的操作应该是某种旋转变换吧,把这些x和y进行相应的旋转后,存回数据区。
其中[]会按照数据的类型进行索引。
noky 2009-04-13
  • 打赏
  • 举报
回复
你的类如果是一个集合类(Vector),vector自身已经有了[]运算符,所以在此处可以使用[]运算符,从你的类中可以猜到CDVector应该是一个集合类,因此在你的类中可以使用[],如果你的类继承这样的基类,如果要使用[] ,就必须重载[]运算符。
beyond071 2009-04-13
  • 打赏
  • 举报
回复
[]就是个下标索引。不重载也可以的,*this就得到了这个对象,(*this)[i]就是当前对象类型数组的第i个元素

65,187

社区成员

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

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