我知道这被问了很多次,但我找不到适合我的问题的解决方案。继承导致模糊转换
我有类似下面的代码:
#include <iostream>
#include "stdafx.h"
using namespace std;
class A //can not modify
{
public:
double ComputeValue(double val)
{
return val + 1;
}
};
class B : public A {}; //can not modify
class C : public A {};
class D : public B, public C {};
class E //can not modify
{
public:
double GetValue(A *a)
{
double x = 4;
return a->ComputeValue(x);
}
double DoSomething()
{
return GetValue(new D());
}
};
int main()
{
E *e = new E();
cout << e->DoSomething();
return 0;
}
我从 'd * A *的' 在DoSomething的错误不明确的转换。我知道我可以用“钻石继承”来解决这个问题。但是我不能改变A类或者B类或者E类,因为它们已经在很多地方使用过了,并且类似于钻石继承中描述的变化可能会在应用程序中产生问题。所以我可以修改只是C类或D类。
为了阐明我需要做的是从A:C继承一个新类,并让D类继承这个新类而不会在F中产生问题。我是寻找一种方法在D类中阻止A从C的继承。另外,为了使B类继承自C或修改B来完成C所做的一切并不是一种选择。
'a.ComputeValue(x);'带'a'指针? – StoryTeller
请不要把C++看作是Java。除非您了解其含义,否则不要使用'new'来创建对象。 – StoryTeller
我发布了该代码,让我知道我的问题是什么。该代码没有任何价值,它只是一张大图的最小化脚本。由于机密性问题,我无法发布实际的代码。如果你对我所问的问题有一个可能的解决方案,我将不胜感激。 – student