yinlb1987 发表于 2008-4-28 17:03

测试你的c++水平

#include <iostream.h>
class a
{
public:
        a(){}
        virtual void prit();
        void call();

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

}
void a::call()
{
        prit();
}
class b:public a
{
public:
        b(){}
        virtual void prit();
        void test();
};
void b::prit()
{
        cout<<"class b"<<endl;
}
void b::test()
{
        a::prit();
}
void main()
{

        a c1;
        b c2;
        //call()
        c2.call();
}
这段程序结果应该是多少?

sunkaidong 发表于 2008-4-28 17:11

一般是这样玩的

#include <iostream.h>
class a
{
public:
    a(){}
    virtual void prit()=0;
    void call();

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

}
void a::call()
{
    prit();
}
class b:public a
{
public:
    b(){}
    void prit();
    void test();
};
void b::prit()
{
    cout<<"class b"<<endl;
}
void b::test()
{
    a::prit();
}
void main()
{

  
    b c2;
        a &c1=c2;
    c1.call();
       
}

newyj 发表于 2008-4-28 17:19

c2.call();调用的是a::call()函数
call()函数调用prit()函数 那这个函数为什么是b中的prit()函数 不是a中的
就是因为把c2声明为b的原因吗

娇里娇气 发表于 2008-4-29 15:28

深奥

smdszgzh 发表于 2008-4-29 16:19

因为a里面的prit()是虚函数,而已b是a的子类,b里对prit()进行了重写,肯定会调用子类里的函数!MFC不是总用子类重写父类的虚函数来实现你想要的功能的嘛~

flyingcloude 发表于 2008-4-30 12:05

嘿嘿,这个貌似还是看懂的拉

zhanghj 发表于 2008-4-30 19:21

[tk09] [tk09] [tk09] 那答案是什么啊???

fhb13 发表于 2008-4-30 21:52

答案:
class b

linwu_2006 发表于 2008-5-1 19:22

长见识了...

PcrazyC 发表于 2008-5-1 22:25

派生类函数覆盖基类函数

sskicgah 发表于 2008-5-1 23:03

还没学到那里还得研究研究

lkz277630964 发表于 2008-5-2 13:41

学习中,吸收你的识知

zy439958 发表于 2008-5-2 18:44

学习ING

战士 发表于 2008-5-4 02:23

找工作中ING

jianfeng 发表于 2008-5-4 15:20

这个问题摆出来....


初学者?

jiangjieqim 发表于 2008-5-4 19:48

[tk05]

lsm_1986 发表于 2008-5-4 20:25

这个怎么编译不了??
#warning This file includes at least one deprecated or antiquated header.
为什么会提示这个??

页: [1]

编程论坛