[英]Implementation of interface in C++
我在C ++中對繼承的幫助很小。 我的代碼具有相同的結構,如下所示:
class IBase {
public:
virtual long Dimensions() = 0;
};
class IShape : public IBase {
virtual long Area() = 0;
};
class Rectangle : public IShape {
private:
long x;
public:
long Dimensions() {return x};
long Area() {return x*x};
};
class Rhombus: public IShape {
private:
long x;
long fi;
public:
long Dimensions() {return x};
long Area() {return x*x*sin(fi)};
};
如您所見,Dimensions()的實現對於兩個類都是相同的。 現在我不想做這樣的事情:
class BaseImplementation : public IBase {
protected:
long x;
public:
virtual long Dimensions() {return x};
};
class Rectangle : public IShape, public BaseImplementation {
public:
long Area() {return x*x};
};
class Rhombus: public IShape, public BaseImplementation {
private:
long fi;
public:
long Area() {return x*x*sin(fi)};
};
可以從BaseImplementation中將方法Dimensions()的實現插入到Rhombus類中嗎? 某些版本的C ++標准是否支持此功能? 謝謝。
與層次的問題是,你的Rectangle
現在繼承了IBase
兩次:一次通過IShape
,一旦通過BaseImplementation
。 名為Virtual Inheritance的 C ++特性旨在處理類似的情況。 請注意,您還需要使IShape
繼承IBase
virtual public
。
如果Dimensions()
在BaseImplementation
實現,並且至少在訪問中protected
,則它應該對任何派生對象可見。
因此,如果Rhombus
派生自BaseImplementation
它將能夠使用Dimension()
函數。 如果你想在Rhombus
情況下為Dimension()
設置一個特定的實現,你的Dimension()
應該是virtual
,你應該在Rhombus
覆蓋它
您可以簡單地在兩者之間實現定義Dimension的圖層:
class IBase {
public:
virtual long Dimensions() = 0;
};
class IShape : public IBase {
public:
virtual long Area() = 0;
};
class IShapesDefinedDimension : public IShape
{
public:
long Dimensions() { return x; }
protected:
long x;
};
class Rectangle : public IShapesDefinedDimension {
public:
long Area() {return x*x;}
};
class Rhombus: public IShapesDefinedDimension {
public:
long Area() {return x*x*sin(fi); }
...
};
無需顯式插入實現。 您已經可以調用myRhombus-> Dimension(),因為它是繼承的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.