首页 > 试题广场 >

以下对于方法覆盖的说法正确的有()

[不定项选择题]

以下对于方法覆盖的说法正确的有()

  • 方法覆盖发生在同一类中
  • 方法的覆盖发生在子类型中
  • 方法名一定要一样
  • 参数类型一定要一样
  • 返回类型一定要一样
  • 访问权限只能一样
<p>E不是发生重载的条件</p>
发表于 2020-12-06 10:11:10 回复(0)
1.重载
    函数重载,运算符重载。
    指相同作用域内,函数名称相同,参数列表不同(参数个数、参数类型,参数顺序),返回值可相同可不同。重写(覆盖)

2.重写
    子类覆盖父类的方法,派生类重新定义基类的虚函数。参数列表相同,返回值相同
    或者!!协变基类中返回的是基类的指针或引用,可以修改为返回派生类的指针或引用。

3.重定义(隐藏)
    派生类中重新定义了基类中的某个函数,这将会隐藏掉基类中的该函数【即不能通过派生类对象调用基类的那个函数了】。
    重定义分两种:①重定义的函数参数列表与基类不同,那么无论基类函数是不是virtual函数都会被隐藏。
                            ②重定义的函数参数列表与基类相同,那么只有基类是非virtual函数才会被隐藏。

    
发表于 2021-04-02 10:02:58 回复(1)
实际上E是错的,返回类型并不需要一样。

编辑于 2020-10-07 19:10:09 回复(4)
方法覆盖
在类继承中,子类可以修改从父类继承来的行为,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的:名称、 返回类型、 参数列表。
个人感觉应该选择BCDE
发表于 2020-09-10 15:57:52 回复(1)
c 不应该是对的,析构函数,构成覆盖,函数名就不相同
发表于 2021-04-17 11:11:07 回复(0)
关于E选项,如下图,所以虚函数的返回值类型要不相同要不协变。

发表于 2022-10-15 09:53:04 回复(0)
方法覆盖是重写,子类覆盖父类的方法,方法名相同,参数类型相同
子类重写父类虚函数不一定要求返回值类型一致,但返回值类型必须是父类虚函数返回值类型的派生类。
#include <iostream>
class Animal
{
public:
    virtual Animal *clone() const
    {
        std::cout << "Animal clone" << std::endl;
        return new Animal();
    }
};

class Cat : public Animal
{
public:
    Cat *clone() const override
    {
        std::cout << "Cat clone" << std::endl;
        return new Cat();
    }
};

int main()
{
    Animal *animal = new Cat();
    animal->clone();//Cat clone

    delete animal;

    return 0;
}
发表于 2023-08-11 11:33:21 回复(0)
这里的覆盖是指存在共享内存的情况下发送的覆盖,函数重载并不一定发生覆盖。
发表于 2023-03-27 11:58:52 回复(0)
关于E,在重载中返回类型是不做考虑的,在这可能也一样。我个人的理解是,在决定调用哪一个函数时,如果考虑返回值,那么调用具体函数是要考虑到上下文的,因为返回值用一个变量接收,这个接收的变量无法确定(需要去上下文寻找然后确定是什么类型)。又或者说函数调用的返回值可以不被接收,比如容器的erase操作会返回一个迭代器,但很多时候我们不会用一个迭代器去接收它,我们会直接这样调用: mymap.erase(q),如果重载考虑返回类型,当其他部分完全相同,返回类型不同的两个函数存在时,无法确定调用哪一个函数。对于覆盖,道理也是一样的。
编辑于 2022-10-04 10:39:41 回复(0)
覆盖不是指返回值,函数名,参数个数和类型都相同吗

发表于 2022-09-06 21:17:49 回复(0)
参数类型可以不一样,例如:协变
发表于 2022-07-26 14:14:30 回复(0)
方法覆盖是重写,子类覆盖父类的方法,方法名相同,参数类型相同,返回值可以不同(协变)
发表于 2022-03-01 00:32:41 回复(0)
方法覆盖的返回类型不需要一样。
发表于 2021-03-31 11:29:51 回复(0)
c++支持如果在基类函数的返回类型是基类的指针或引用的情况下,可以修改为派生类的指针或引用。
发表于 2020-09-16 16:29:34 回复(1)
方法覆盖是重写吗,重写的话子类重写的函数签名不应该和父类是一样的吗,为什么e选项中的返回值类型可以不一样

发表于 2020-08-04 14:04:34 回复(2)