gpt4 book ai didi

C++ 共同祖先问题。它是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:10 24 4
gpt4 key购买 nike

您好,我刚刚完成期末考试。有一道题是“定义 C++ 中的共同祖先问题”,并说明使用语言的什么特性来解决这个问题。

我不记得曾经在类里面学习过或听说过共同祖先问题。但是我写了以下内容:

我说这和继承有关。如果一个父类和一个子类定义了相同的方法,具有相同的方法签名。因此,例如,如果我有 Parent 类和 Child 类。

在类里面我有家长

void sayHello(){
cout << "hello I'm a parent" <<endl;
}

然后在类里面我有 child

void sayHello(){
cout << "hello I'm a child" <<<endl;
}

如果我有

Parent* p1;
Child* c1 = new Child();
p1 = & c1;

如果我调用 p1.sayHello()我会调用method sayHello()来自父类,即使它绑定(bind)到 Child 类型的实例。

因此,为了解决这个问题,我们必须使用 virtual 关键字并说

virtual void sayHeyllo(){
.....
}

所以当我调用 p1.sayHello() 时,它会调用子类而不是父类的方法。

这是正确的吗?我只是猜测了一下,但它有点道理。我用谷歌搜索了 C++ 的共同祖先问题,但没有找到任何结果。你知道我说得对吗?

谢谢。

最佳答案

我认为他们指的是继承钻石。当您遇到类似以下情况时:

struct A {};
struct B : A {};
struct C : A {};

struct D : B, C {}; // here is the problem

D 中的问题是 A 有两份拷贝,一份来自 B,一份来自 C .要解决此问题,您必须使用虚拟继承:

struct A {};
struct B : virtual A {};
struct C : virtual A {};

struct D : B, C {}; // No problem!

关于C++ 共同祖先问题。它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878055/

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