gpt4 book ai didi

c++ - 我将如何通过抽象类传递虚拟方法但可选择不覆盖?

转载 作者:行者123 更新时间:2023-11-30 01:34:19 25 4
gpt4 key购买 nike

我试图通过一个抽象类传递一个虚拟方法,但只有它的一些派生类覆盖基方法,而其他的则运行原始方法。

class Animal {
virtual void speak() {
//generic speaking code
}
}
class Mammal : Animal {
virtual void speak() = 0;
//allows speak to be overridden by derived class
}
class Dog : Mammal {
//doesn't do anything special with speak(), should run generic speaking code
}
class Human : Mammal {
void speak() {
//overrides generic speaking code
}
}

我想从 Dog 调用 speak() 来运行 Animal 的 speak() 方法,但是从 Human 调用 speak() 来运行它自己的 speak() 方法。我该怎么做?

最佳答案

哺乳动物不需要这个:

virtual void speak() = 0;

Human 仍然可以很好地覆盖 speak(),而 Dog 则不必。不过,请确保您使用的是公共(public)继承,而不是私有(private)继承。即:

class Mammal : public Animal {

代替:

class Mammal : Animal {

作为旁注,您应该在覆盖虚函数时使用 override 关键字。它有助于捕捉一些常见的错误,即认为您正在覆盖一个函数,而实际上您只是在重载它。所以你的代码应该是:

class Animal {
public:
virtual void speak()
{}
};

class Mammal : public Animal {
};

class Dog : public Mammal {
};

class Human : public Mammal {
public:
void speak() override
{}
};

关于c++ - 我将如何通过抽象类传递虚拟方法但可选择不覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com