gpt4 book ai didi

c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?

转载 作者:太空狗 更新时间:2023-10-29 20:32:52 25 4
gpt4 key购买 nike

假设我们有

class A {    
public:
virtual int foo() { cout << "foo!"; }
}

class B : public A {
public:
virtual int foo() =0;
}

class C : public B {
public:
virtual int foo() { cout << "moo!"; }
}

这真的是覆盖吗?我认为这实际上是重载。在设计方面做出这样的事情有什么意义?

我们得到了一个基类A。然后我们得到了一个从具体类A派生的抽象派生类B,然后通过C实现了B。

我们在这里做什么,这样做有意义吗?

最佳答案

重载意味着您​​有两个同名但参数不同的函数。这里不是这种情况。

例子:

int functionA() { /*...*/ };
int functionA(int someParameter) { /*...*/ };

覆盖意味着在子类中用相同的参数重写一个函数。这就是您举的例子。

这是定义部分。现在开始设计:

当你有一个纯虚函数时,具体的子类必须覆盖它。因此,通过添加纯虚函数,您可以确保所有子类都提供相同的函数集(=接口(interface))。示例代码中似乎就是这种情况。

但这不是一个很好的例子,因为具体的父类(super class)已经实现了 foo() 的默认功能。当有一个抽象子类将其重新定义为纯虚拟时,这对我来说是类层次结构存在缺陷的标志,因为子类(以及 foo() 的调用者)通常应该能够回退到默认实现。用这样一个抽象的例子来解释有点困难,但像这样的层次结构在我看来有点可疑。

关于c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483255/

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