| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 511 人关注过本帖
标题:为什么输出结果不是我期望的?
只看楼主 加入收藏
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
为什么输出结果不是我期望的?
#include <iostream>
using namespace std;
class B0{
public:
    void display(){cout<<"B0::display()"<<endl;}
};
class B1:public B0
{
public:
    void display(){cout<<"B1::display()"<<endl;}

};
class D1:public B1
{
public:
    void display(){cout<<"D1::display()"<<endl;}
};
void fun(B0 *ptr)
{
    ptr->display();
}
void main()
{
    B0 b0;
    B1 b1;
    D1 d1;
    B0 *p;
    p=&b0;
    fun(p);
    p=&b1;
    fun(p);
    p=&d1;
    fun(p);
}
我希望的显示的结果是
B0::display()
B1::display()
D1::display()
而在Visual C++中的结果是
B0::display()
B0::display()
B0::display()
能告诉我这是为什么?基类对象可以用指针来访问派生类的,为什么没有显示我期待的那种
搜索更多相关主题的帖子: 期望 输出 结果 
2009-10-15 23:22
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:10 
void fun(B0 *ptr)
{
    ptr->display();
}
这个函数中,把对象都转成B0了。
如果想要得到你期望的那样,那把代码改成如下的

#include <iostream>
using namespace std;
class B0{
public:
    virtual void display(){cout<<"B0::display()"<<endl;}
};
class B1:public B0
{
public:
    virtual void display(){cout<<"B1::display()"<<endl;}
};
class D1:public B1
{
public:
    virtual void display(){cout<<"D1::display()"<<endl;}
};
void fun(B0 *ptr)
{
    ptr->display();
}
void main()
{
    B0 b0;
    B1 b1;
    D1 d1;
    B0 *p;
    p=&b0;
    fun(p);
    p=&b1;
    fun(p);
    p=&d1;
    fun(p);
}

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-16 00:17
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:0 
但是我看一个C++视频讲解中为什么没有将display()申明成虚函数?

Anything is possible!
2009-10-16 11:27
快速回复:为什么输出结果不是我期望的?
数据加载中...
 
   



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

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