21xrx.com
2024-12-22 20:46:48 Sunday
登录
文章检索 我的文章 写文章
如何在C++中覆盖派生类继承到的成员函数?
2023-06-22 18:49:09 深夜i     --     --
C++ 覆盖 派生类 继承 成员函数

在C++中,派生类可以继承基类的成员函数,但也可以覆盖这些继承来的成员函数。覆盖一个成员函数通常被称为重写或重载这个成员函数。这种技术非常有用,因为它允许您修改基类行为,以适应特定的情况或应用程序。此外,重写基类成员函数还可以提高代码的可读性和可维护性,因为您只需要在一个地方定义和实现该函数。

要覆盖派生类从基类继承的成员函数,您需要使用与基类成员函数相同的名称和参数列表定义一个新的成员函数。在派生类中,这称为“覆盖”基类成员函数。当您调用该成员函数时,编译器会自动选择派生类中的版本而不是基类中的版本。

让我们看一个简单的示例。假设我们有一个基类`Animal`,其中包含一个名为`makeSound`的成员函数,它返回字符串。我们还有一个派生类`Cat`,它从`Animal`继承`makeSound`成员函数。然而,我们希望在`Cat`中覆盖`makeSound`并返回“喵喵喵”而不是“动物发出声音”。


#include <iostream>

#include <string>

using namespace std;

class Animal {

public:

  virtual string makeSound()

    return "动物发出声音";

  

};

class Cat : public Animal {

public:

  string makeSound() override

    return "喵喵喵";

  

};

int main() {

  Animal* animal = new Cat();

  cout << animal->makeSound() << endl;

  return 0;

}

在派生类`Cat`中,我们使用`override`关键字重写基类中的`makeSound`函数。这确保了我们正确地覆盖了基类函数,而不是意外地定义了一个新的函数。在`main`函数中,我们创建了一个`Cat`对象并使用`Animal`类型的指针引用它。然而,由于`Cat`覆盖了`makeSound`,所以在运行时,调用的是`Cat`中的版本,打印出“喵喵喵”。

在覆盖成员函数时,您还应该注意以下几点:

1.必须使用相同的名称和参数列表定义新函数。否则,您将定义一个不同的函数,而不是重写基类函数。

2.覆盖的函数必须具有与基类函数相同的访问修饰符。例如,如果基类函数是公共的,则派生类中的该函数也必须是公共的。

3.如果您使用多态,即将对象的引用或指针分配给基类类型,然后调用其成员函数,则会自动选择派生类中的函数。因此,在实现覆盖函数时,您需要确保其行为与基类函数相同,否则可能会导致意外行为。

总之,重写派生类继承的成员函数是一个非常有用的技术。可以使用相同的名称和参数列表定义新函数,然后使用`override`关键字指示编译器要覆盖基类函数。但是,请记住,与基类成员函数相比,覆盖的成员函数必须具有相同的访问限制,并且它们的行为应该是相同的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复