gpt4 book ai didi

c++ - 派生类通过基类定义函数

转载 作者:太空狗 更新时间:2023-10-29 20:43:56 27 4
gpt4 key购买 nike

考虑以下代码:

struct A
{
virtual void f() = 0;
};

struct B
{
void f();
};

struct C : public A, public B
{};

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

// All these calls should result in B::f
a->f();
b->f();
c->f();
}

编译器声明C 是抽象的。如何解决这种情况?问题好像是菱形继承(钻石问题),但是没看到解决方法。

编辑:谢谢,这是工作示例:

#include "stdio.h"

struct A
{
virtual void f() = 0;
};

struct B
{
void f()
{
printf("B::f\n");
}
};

struct C : public A, public B
{
void f()
{
printf("C::f\n");
B::f();
}
};

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

printf("Calling from A\n");
a->f();
printf("Calling from B\n");
b->f();
printf("Calling from C\n");
c->f();
}

输出:

Calling from A
C::f
B::f
Calling from B
B::f
Calling from C
C::f
B::f

最佳答案

问题在于这两个 f() 函数完全无关,即使它们恰好具有相同的名称。

如果所需的行为是 Cvirtual f() 调用 B::f(),你必须明确地做到这一点:

struct C : public A, public B
{
void f();
};

void C::f() {
B::f();
}

关于c++ - 派生类通过基类定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176916/

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