| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 518 人关注过本帖
标题:六百里加急:为什么在基类的get()函数前加上virual后,继承以后,在主函数 ...
只看楼主 加入收藏
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:5 
六百里加急:为什么在基类的get()函数前加上virual后,继承以后,在主函数中输出不是动态联编,输出的都是1呢还是,求教!谢谢啊
#include<iostream>
using namespace std;
class A
{
      public:
     virtual int get(){return 1;} //难道不对吗这里?
};
class B:public A
{
      public:
      int get(){return 2;}
};
int main()
{
    while(1)
    {
    cout<<"1:父类2:子类3:退出:"<<endl;
    int choice;
    cin>>choice;
    A*p;
    bool quit =false;
    switch(1)
    {
             case 1:p=new A;
             break;
             case 2:p=new B;
             break;
             case 3:quit=true;
             break;
             default:
                     cout<<"请输入1,2,3"<<endl;
             break;
    }
    if(quit==true)
    {
                  break;
    }
    cout<<p->get()<<endl;
}
system("pause");
return 0;
}
搜索更多相关主题的帖子: return false 
2011-05-24 18:22
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
C++、面向对象

o(∩∩)Linux & Python 群:187367181
2011-05-24 18:23
buffer
Rank: 5Rank: 5
等 级:职业侠客
帖 子:73
专家分:326
注 册:2010-12-31
收藏
得分:0 
switch(1)?? switch(choice)
2011-05-24 19:13
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:20 
程序代码:
#include<iostream>
using namespace std;
class A
{
      public:
     virtual int get(){return 1;} //It's ok here:-)
};
class B:public A
{
      public:
      int get(){return 2;}
};
int main()
{
    while(1)
    {
    cout<<"1:父类2:子类3:退出:"<<endl;
    int choice;
    cin>>choice;
    A *p;
    bool quit =false;
    switch(choice)  //error writing in your code!
    {
             case 1:p=new A;
             break;
             case 2:p=new B;
             break;
             case 3:quit=true;
             break;
             default:
                    p=NULL;cout<<"请输入1,2,3"<<endl; //here is a bug in your design, pointer p is not evaluated!
             break;
    }
    if(quit==true)
    {
                  break;
    }
    if(NULL!=p)  //you'd better check p here when you using it
    {

        cout<<"the return value is: "<<p->get()<<endl;
    }

    else
    {
        cout<<"p is not evaluated!"<<endl;
    }
}
system("pause");
return 0;
} 


[ 本帖最后由 Pirelo 于 2011-5-24 19:20 编辑 ]
2011-05-24 19:17
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
收藏
得分:0 
回复 3楼 buffer
我写错了,不好意思哈

Sharp your mind!
2011-05-24 22:30
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
收藏
得分:0 
回复 4楼 Pirelo
好强

Sharp your mind!
2011-05-24 22:30
快速回复:六百里加急:为什么在基类的get()函数前加上virual后,继承以后,在 ...
数据加载中...
 
   



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

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