this指针问题,请教大家

flyiner 2006-05-06 07:22:24
侯捷的深入浅出中:(修改过)
class CShape
{
private:
int m_color;

public:
virtual void display(){cout<<"CShape"<<endl;}
void setcolor(int color) { m_color = color;display(); }
};

class CRect : public CShape
{
public:
void display() { cout<<"CRect"<<endl;} }
};

CRect rect1;
rect1.setcolor(2);//编译器实际生成的代码CShape::setcolor(2, (CRect*)&rect1);

_______________________________________
问题是,为什么&rect1前面要加(CRect*)? 如果这样的话this=(CRect*)&rect1,this就成了(CRect*)型的指针了,是这样吗??但是在setcolor中调用display调用的是CShape的display,也就是说setcolor中的this指针是CShape型的,那&rect1前为什么加(CRect*)??

...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyiner 2006-05-06
  • 打赏
  • 举报
回复
CSahpe的display深藏之后,

rect1.setcolor(2);//调用的是CSahpe的display,说明this是CShape型的,是这样吗?
flyiner 2006-05-06
  • 打赏
  • 举报
回复
对不起,我的程序写错了
class CShape
{
private:
int m_color;

public:
virtual void display(){cout<<"CShape"<<endl;} //去掉virtual!!
void setcolor(int color) { m_color = color;display(); }
};

这样CSahpe的display深藏了
sankt 2006-05-06
  • 打赏
  • 举报
回复
问题是,为什么&rect1前面要加(CRect*)? 如果这样的话this=(CRect*)&rect1,this就成了(CRect*)型的指针了,是这样吗??
//==================
可以这样说


但是在setcolor中调用display调用的是CShape的display,也就是说setcolor中的this指针是CShape型的,那&rect1前为什么加(CRect*)??
//=============
这里调用的是CRect的display, 因为CShape里面定义的是虚函数,所以根据多态,将调用CRect的display()

65,210

社区成员

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

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