gpt4 book ai didi

c++ - 是否可以从一个基类动态转换到另一个基类?

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

比如我有这样的代码

class Base1
{
virtual void wonderFULL() = 0;
};

class Base2
{
// all this weird members
};

class Derived : public Base1, public Base2
{
// not so weird members
};

int main()
{
Derived Wonder;
magicFunction(&Wonder);
return 0;
}

void magicFunction(Base2 *ptr)
{
if (Base1 *b1 = dynamic_cast<Base1 *>(ptr))
b1->wonderFULL();
}

然而,由于无法将 ptr 转换为 b1,因此永远不会执行 wonderFULL。是否有可能执行这样的转换?

最佳答案

这个

#include <iostream>

class Base1 {
public:
virtual void wonderFULL() = 0;
};

class Base2 {
public:
virtual ~Base2() {} // added so the code compiles
};

class Derived : public Base1, public Base2 {
virtual void wonderFULL() {std::cout << "wonderful\n";} // added so the code compiles
};

void magicFunction(Base2 *ptr) {
if (Base1 *b1 = dynamic_cast<Base1 *>(ptr))
b1->wonderFULL();
}

int main() {
Derived Wonder;
magicFunction(&Wonder);
return 0;
}

为我打印 wonderful。我的结论是您没有显示重现问题所需的代码。

获取(拷贝)您的实际代码,并通过逐步删除不必要的代码来提取它,直到您派生出一个独立的(除了 std lib 之外不需要其他头文件),可编译的示例来重现问题。很可能您会在这样做时发现问题。但是,如果您不这样做,您就有了完美的复制案例可以回到这里询问。

关于c++ - 是否可以从一个基类动态转换到另一个基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813436/

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