#include "iostream.h"class animal
{
public:
animal *p;
animal()
{
p=this; } void eat()
{
cout<<"animal eat"<<endl;
}
};class fish:public animal
{
public:
void eat()
{
cout<<"fish eat"<<endl;
}
};fish fi;void main()
{
}看孙鑫的视频,说animal()中出现的this指向的是派生类的地址;
要添加什么代码,如何证明,this指向的是fish对象?
{
public:
animal *p;
animal()
{
p=this; } void eat()
{
cout<<"animal eat"<<endl;
}
};class fish:public animal
{
public:
void eat()
{
cout<<"fish eat"<<endl;
}
};fish fi;void main()
{
}看孙鑫的视频,说animal()中出现的this指向的是派生类的地址;
要添加什么代码,如何证明,this指向的是fish对象?
解决方案 »
- 使用以下代码后,视图字体旋转90度
- 请教:ActiveMovie控件怎么控制播放时的大小?
- 百思不解的错误 error LNK2001: unresolved external symbol
- 记事本保存文件的ANSII格式能保存汉字吗
- 『请教』CAsyncSocket connnect 多次连接问题
- 线程同步到主进程?
- 用COleDropTarget实现拖动无法响应OnDrop的问题?
- 历史上写的最差的程序
- 好的东西让她发扬光大,大家来说说自已去喜欢去的论坛!
- edit control 如何实现搜索建议的方式
- 完成端口ZeroMemory(&(lpPerIOData->Overlapped), sizeof(OVERLAPPED))是否必须?
- 关于一个vs2010的问题
#include <iostream>
using namespace std;class animal
{
public:
animal *p;
animal()
{
p=this;}virtual void eat()//这里要设为虚函数
{
cout<<"animal eat"<<endl;
}
};class fish:public animal
{
public:
void eat()
{
cout<<"fish eat"<<endl;
}
};fish fi;void main()
{
fi.eat();
fi.p->eat();//p虽然是基类的指针,但指向派生类
}
{
public:
animal *p;
animal(){ p=this; } void eat()
{
cout<<"animal eat"<<endl;
}
};//能说中文
class CanSpeakChs
{
public:
CanSpeakChs(){ bAbility = true; }private:
bool bAbility;
};class fish: public animal
{
public:
void eat()
{
cout<<"fish eat"<<endl;
}
};//会说中文的高级鱼
class fishX: public CanSpeakChs,public animal
{
public:
void eat()
{
cout<<"fistX eat"<<endl;
}
};int main()
{
fish f; //&f 相当于 fish的this ,p是animal的this,很巧合它们相等
cout<<&f<<' '<<f.p<<'\n'; fishX fx;
// 这里就可以看出不同了,&fx相当于fishX的this,p是animal的this,它们不同
// 因为继承对象的内存布局不同了,fishX首先继承于CanSpeakChs,然后才是animal
cout<<&fx<<' '<<fx.p<<'\n'; return 0;
}
class animal
{
public:
animal *p;
animal()
{
p=this; }virtual void eat()
{
cout<<"animal eat"<<endl;
}此时,
void main()
{
fi.p->eat();
}输出: fish eat
真不好意思我操作错误两次显示animal;多谢指点!
{
public:
animal *p;
animal()
{
p=this;
cout<<this<<endl;}输出this指针指向的地址
}
virtual void eat()
{
cout<<"animal eat"<<endl;
}
};class fish:public animal
{
public:
void eat()
{
cout<<"fish eat"<<endl;//输出
}
};fish fi;void main()
{
cout<<&fi<<endl;//输出fi对象的地址}两个地址是相同的。fish fi,调用animal的构造函数,传入this指针,this指向了fi,所以p也指向fi。
(
animal *p;
animal()
{
p=this; }
);class A:public animal
{};class B:public A
{};class C:public B
{};Class D:public C
{};能不能这么说,哪个类生成了对象,this就指向哪个类的对象?
既然是地址,实际上它可以强制转换为它的任何一个祖先的形式,因为基因的继承关系
通过this访问类中所有非静态成员(有点多余)
常用this向其它对象传递当前对象的指针
this不能被修改