俺编了个一般的程序用来测试:
#include<iostream>
using namespace std;
class ceshi1
{
public:ceshi1 *p1;
ceshi1()
{
p1=this;
}
};
class ceshi2:public ceshi1
{
public:ceshi2 * p2;
ceshi2()
{
p2=this;
}
void get()
{
cout<<p1<<endl;
cout<<p2<<endl;
}};
void main()
{
ceshi1 a;
ceshi2 b;
cout<<&a<<endl<<&b<<endl;
cout<<a.p1<<endl<<b.p2<<endl;
b.get();
}最后的输出是:
0012FF7C
0012FF74
0012FF7C
0012FF74
0012FF74
0012FF74兄弟最不明白的是为什么最后两个输出的地址是一样的?大虾们帮帮忙哦。
#include<iostream>
using namespace std;
class ceshi1
{
public:ceshi1 *p1;
ceshi1()
{
p1=this;
}
};
class ceshi2:public ceshi1
{
public:ceshi2 * p2;
ceshi2()
{
p2=this;
}
void get()
{
cout<<p1<<endl;
cout<<p2<<endl;
}};
void main()
{
ceshi1 a;
ceshi2 b;
cout<<&a<<endl<<&b<<endl;
cout<<a.p1<<endl<<b.p2<<endl;
b.get();
}最后的输出是:
0012FF7C
0012FF74
0012FF7C
0012FF74
0012FF74
0012FF74兄弟最不明白的是为什么最后两个输出的地址是一样的?大虾们帮帮忙哦。
解决方案 »
- Visual C++ 2008 SP1 动态编译的程序发布时需要附上什么文件?
- 动态创建WMPlayer,并设置player->put_uiMode("none")时,为什么WMPlayer控件会有闪屏现象
- 几个com问题请教高手
- 如何让对话框部分透明?
- Debug Assertion Failed!
- 真诚求助:dll引起内存泄露问题
- 怎么把二维数组作为参数传递?
- 算法运行时间
- vc++ hook截获鼠标右键的复制粘贴消息
- 视频捕捉显示位图的问题---下面代码什么地方有错误么?位图显示不出来!
- 关于模态对话框的显示问题
- visualC++ 编译错误 syntax error : missing ';' before identifier 'NDIS_OID'
作为一个object是不存在父object+子Object的,继承是类的特性,一旦对象生成了,被定性了,只有一个object.
所以 b.get() 输出的当然应该是同一个值,因为只有一个对象 b
{
public:ceshi2 * p2;
ceshi2()
{
p2=this;
}
void get()
{
cout < <p1 < <endl; //这里的p1是从ceshi1中继承下来的
cout < <p2 < <endl;
} }; 你在ceshi2构造的时候,其实从ceshi1继承下来的构造函数也执行了,那么继承下来的p1就等于ceshi2的this了