gpt4 book ai didi

c++ - 如何添加最终覆盖

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:14 25 4
gpt4 key购买 nike

如何添加“最终覆盖”来解决这个问题?

#include <iostream>

struct Shape
{
virtual void print()
{
std::cout << "SHAPE" << std::endl;
}
virtual ~Shape() {}
};

struct Box : public virtual Shape
{
void print()
{
std::cout << "BOX" << std::endl;
}
};

struct Sphere : public virtual Shape
{
void print() final override
{
std::cout << "SPHERE" << std::endl;
}
};

struct GeoDisc : public Box, public Sphere
{
};

int main(int argc, char** argv)
{
Shape* s = new GeoDisc;

s->print();

delete s;

return 0;
}

这是错误信息:
31:8: 错误:'GeoDisc' 中的'virtual void Shape::print()' 没有唯一的最终覆盖

最佳答案

虚方法声明中的关键字 final 防止多重继承,所以如果我试图解决这种情况下的歧义,那是错误的方法。如果 Box 和 Sphere 都有 final word,你会得到错误“virtual function 'Shape::print' has more than one final overrider in 'GeoDisc'”。法律歧义解决方案是:

struct Sphere : public virtual Shape
{
void print() override
{
std::cout << "SPHERE" << std::endl;
}
};

struct GeoDisc : public Box, public Sphere
{
void print() final override
{
Sphere::print();
}
};

关于c++ - 如何添加最终覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50032705/

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