gpt4 book ai didi

C++调用正确的虚函数

转载 作者:行者123 更新时间:2023-11-28 06:12:44 24 4
gpt4 key购买 nike

我有以下情况的问题:

 template<class T>
class A {
public: virtual int f() { return 1; }
};

class BaseA : public A<BaseA> {};
class DerivedA : public BaseA, public A<DerivedA> {};

当我这样做的时候:

 BaseA* b1 = new DerivedA;
b1->f();

它调用A<BaseA>::f()而不是 A<DerivedA>::f()而且我不知道如何修复它。

最佳答案

来自 OP 的附加信息:这是一个家庭作业问题,其中类 A 可以自由更改,但类 BaseADerivedA 不能改变了。

那么下面是一种解决方案,基于虚拟继承层次结构中的支配:

#include <iostream>
#include <typeinfo>
using namespace std;

struct BaseA;

struct I
{
virtual auto f()
-> int = 0;
};

template<class T>
class A
: public virtual I
{
public:
virtual auto f()
-> int override
{ cout << typeid( T ).name() << '\n'; return 1; }
};

template<>
class A<BaseA>: public virtual I {};

class BaseA : public A<BaseA> {};
class DerivedA : public BaseA, public A<DerivedA> {};

auto main() -> int
{
BaseA* b1 = new DerivedA;
b1->f();
}

关于C++调用正确的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935055/

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