| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1068 人关注过本帖
标题:[求助] 关于继承与转换
取消只看楼主 加入收藏
wuliang_227
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
 问题点数:0 回复次数:3 
[求助] 关于继承与转换

#include <iostream>
using namespace std;

class a
{
public:
a();
void display();
};

a::a()
{
cout<<"a.............."<<endl;
}

void a::display()
{
cout<<"a::display"<<endl;
}


class b : public a
{
public:
b();
void display();
};

b::b()
{
cout<<"b.............."<<endl;
}
void b::display()
{
cout<<"b::display"<<endl;
}

class c : public a
{
public:
c();
void display();
};

c::c()
{
cout<<"c.............."<<endl;
}
void c::display()
{
cout<<"c::display"<<endl;
}
int main(void)
{
b* objb = new b;
c* objc = (c*)objb;
objc->display();
return 0;
}

执行结果:
a..............
b..............
c::display

我想知道在转换的时候它是如何转换的,原理是什么,在内存中是如何来分配的?

如果将程序改成这样,将a中的display改在虚函数,则这样:
#include <iostream>
using namespace std;

class a
{
public:
a();
virtual void display();
};

a::a()
{
cout<<"a.............."<<endl;
}

void a::display()
{
cout<<"a::display"<<endl;
}


class b : public a
{
public:
b();
void display();
};

b::b()
{
cout<<"b.............."<<endl;
}
void b::display()
{
cout<<"b::display"<<endl;
}

class c : public a
{
public:
c();
void display();
};

c::c()
{
cout<<"c.............."<<endl;
}
void c::display()
{
cout<<"c::display"<<endl;
}
int main(void)
{
b* objb = new b;
c* objc = (c*)objb;
objc->display();
return 0;
}

执行结果:
a..............
b..............
b::display

我也这个时候肯定与晚绑定,多态有关,但还是不太明白,请哪位高手指点一下.谢谢!

搜索更多相关主题的帖子: 继承 
2006-10-09 20:08
wuliang_227
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 
我也不是很明白,哪个明白的能再给解释解释呀

2006-10-10 18:09
wuliang_227
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 

首先谢谢上面给我答复的, thank you very much!

我想这不是偶然,请看下面情况:

#include <iostream>
using namespace std;

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


class b : public a
{
public:
void display();
};
void b::display()
{
cout<<"b::display"<<endl;
}


class c : public a
{
public:
void display();
void show();
private:
int i;
};
void c::display()
{
i = 10;
cout<<"c::display"<<endl;

}
void c::show()
{
cout<<"c::show()"<<endl;
cout<<i<<endl;
}

int main(void)
{

b* objb = new b;
c* objc = (c*)objb;

objc->display();
objc->show();

return 0;
}

我在 c 类中增加了一个函数与一个私有的成员变量,而在进行 c* objc = (c*)objb 后,这个私有变量也就变成可用的了.

我觉得这个问题值得深究哟!呵呵


2006-10-10 21:04
wuliang_227
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-17
收藏
得分:0 
我估计这和类型转换有着莫大的关系,应该是在进行类型转换的时候进运行了某种机制,但苦于现在一直没有找到相应的资料呀

2006-10-11 19:16
快速回复:[求助] 关于继承与转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041239 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved