c++关于类的问题求指教

fabby 发布于 2013/12/18 17:20
阅读 163
收藏 0


#include <string>
#include <iostream>
#include <string>
using namespace std;
class Root
{
public:
string name;
Root(string str)
{ cout<<"star1 now:"<<str<<endl;}
virtual void Display()
{ cout <<"root"<<endl;}
void RootFun()
{Display();}
};


class Derive:public  Root
{public:
Derive(string str):Root(str)
{cout<<"start2 now:"<<str<<endl;}
virtual void Dispaly()
{cout<<"derive"<<endl;}
};
void main()
{


    Root *p;
Derive d("Derive");
Root b("Root");
p=&b;
p->Display();
p=&d;
p->Display();
p->RootFun();

}



结果为:

star1 now:Derive
start2 now:Derive
star1 now:Root
root
root
root
Press any key to continue

我没想通的是为什么不是出现

star1 now:Derive
这个结果 

然后就执行display这个

显示root 

我想不出执行的顺序


 想不通  求指教 

加载中
0
此号作废
此号作废
代码格式先搞好
0
BoYunfeng
BoYunfeng

单步跟踪一下就知道顺序了

至于原理,根据你的代码:

1、构造子类时,会先构造基类;

2、指针p的类型是Root*,所以,所有的操作,在没有被继承的情况下,都调用Root类中的方法,看来是代码中子类中经继承Display方法,不过方法名拼写错了

0
进击的企鹅
进击的企鹅
p=&d;
p->Display();
//打印为什么是root不是derive???
0
进击的企鹅
进击的企鹅

引用来自“进击的企鹅”的答案

p=&d;
p->Display();
//打印为什么是root不是derive???
终于发现上面lz代码中Display写错了,擦,迷惑了半天
0
fabby
fabby

引用来自“BoYunfeng”的答案

单步跟踪一下就知道顺序了

至于原理,根据你的代码:

1、构造子类时,会先构造基类;

2、指针p的类型是Root*,所以,所有的操作,都调用Root类中的方法

 谢谢
0
freesnow
freesnow

引用来自“进击的企鹅”的答案

引用来自“进击的企鹅”的答案

p=&d;
p->Display();
//打印为什么是root不是derive???
终于发现上面lz代码中Display写错了,擦,迷惑了半天
好坑。。我看了半天,都快以为自己不会C++了。。
ericsoul
ericsoul
呃,,,lz太坑了。我也再想,难道*p=&d,和*p=new xx(),不一样呢。差点颠覆了我的人生观。。。
0
ling0
ling0
发代码请发代码格式,别人看你的代码能速度快点儿,回答的可能也就快些。
0
fabby
fabby

引用来自“BoYunfeng”的答案

单步跟踪一下就知道顺序了

至于原理,根据你的代码:

1、构造子类时,会先构造基类;

2、指针p的类型是Root*,所以,所有的操作,都调用Root类中的方法

谢谢
返回顶部
顶部