首页 > 试题广场 >

派生类中虚函数原型的()?

[单选题]

派生类中虚函数原型的()?

  • 函数类型可以与基类中虚函数的原型不同
  • 参数个数可以与基类中虚函数的原型不同
  • 参数类型可以与基类中虚函数的原型不同
  • 以上都不对
推荐
说明:c ++规定虚函数在派生类中重新定义时,其函数原型,包括函数类型、函数名、参数个数、参数类型的顺序,都必须与基类中的原型完全相同


编辑于 2018-05-05 21:27:04 回复(0)
更多回答
int main()
{
    class A
    {
    public:
        virtual void f() { cout << 1 << endl; };
    };
    class B : public A
    {
    public:
        virtual void f() override { cout << 2 << endl; }
    };
    class C : public A
    {
    public:
        virtual string f(const int a = 0, double b = 0.0) { return string("test");  }
    };

    A * a = new B();
    A * b = new C();
    C c;

    a->f();    //2
    b->f();    //1
    cout << c.f() << endl;    //test

    delete a, b;
    a = nullptr;
    b = nullptr;

    return 0;
}

//c++11后请用override显式覆盖基类同名方法实现多态 此时子类方法返回类型和形参表必须和基类的一致 不然编译不过
//但是不用override时同名的虚函数原型是可以返回类型
//不同形参表不同的 此时编译器将当成一个新的独立的函数处理 所以这题不严谨

编辑于 2018-06-06 15:00:37 回复(1)
基类函数与派生类函数返回值类型与异常规格必须匹配,没必要完全一致
发表于 2018-08-10 09:08:12 回复(0)

感觉这个说法不准确吧,返回值类型可以是父子类关系


发表于 2019-04-01 13:04:13 回复(0)
C++规定虚函数在派生类中重新定义是,其函数类型、参数名、参数个数、参数类型的顺序,都必须与基类中的原型完全相同。
发表于 2019-08-17 15:20:28 回复(0)
可以协变:返回值为本类的引用或指针
发表于 2023-03-10 07:41:38 回复(0)
返回类型协变了解一下
发表于 2022-03-29 10:44:37 回复(0)
C++11的override检查,派生类中虚函数重写的返回类型可以是原型中返回类型的派生类型,有这么一点例外
编辑于 2021-11-11 18:53:21 回复(0)
***题目,怎么不可以重载虚函数
发表于 2021-03-12 02:53:05 回复(0)
不知道这题想表达什么。
发表于 2020-08-23 15:35:01 回复(0)
ABC都必须一致的
发表于 2018-07-14 14:08:50 回复(0)