C++关于虚函数的问题,求大神帮忙解答下,谢谢

C++关于虚函数的问题,求大神帮忙解答下,谢谢1. 再基类和派生类中都定义了同名虚函数,此时根据基类指针调用这两个虚函数也分别怎么做。
2.在基类中定义一个非虚函数,而在派生中定义了同名虚函数,此时要分别调用它们要怎么操作基类指针
3.能不能同名函数基类为虚,派生不为虚。

假设有如下类:

class A
{
    public:
        virtual void foo(){cout<<"this is A."<<endl;}
};
class B: public A
{
    public:
        virtual void foo(){cout<<"this is B."<<endl;}
};

1.如何根据父类指针调用父类和其子类的虚函数

int main()
{
    A *p = new A;
    p->foo(); //输出this is A.
    p = new B;
    p->foo(); //输出this is B. 
}

2.当父类中的函数不为虚函数,而子类为同名虚函数时:

父类中的函数入口地址确定,调用时直接跳转该入口地址,而不是去查虚函数表,因此不会发生覆盖。

假设class A作如下修改,而class B不变

class A
{
    public:
        void foo(){cout<<"this is A."<<endl;}
};int main()
{
    A *p = new A;
    p->foo(); //输出this is A.
    p = new B;
    p->foo(); //此时程序会直接跳转到Aç±»foo()的入口地址,而不是查虚函数表,因此输出this is A.
}

3.能不能同名函数基类为虚,派生不为虚。

子类若定义了与父类某个虚函数签名相同的函数,即为覆盖该函数,子类中对应的函数默认成为虚函数,不论是否在前面加virtual关键字。

温馨提示:答案为网友推荐,仅供参考
相似回答