我知道這被問了很多次,但我找不到適合我的問題的解決方案。繼承導致模糊轉換
我有類似下面的代碼:
#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