簡體   English   中英

在父類型聲明中使用子類型

[英]Use a child type in the parent type declaration

我正在嘗試做這樣的事情:

class Shape {
    ...
    ...
    ...
    Line GetTangent();
}
class Line:Shape { ... }

它沒有用,因為尚未聲明Line類型。 我能做什么?

轉發您的課程。

class Line;

class Shape 
{
public:
    Line GetTangent();
};

class Line : Shape
{

}

Line Shape::GetTangent()
{
    // Do sth
}

C ++在使用時要求類型完整。 Shape您僅通知編譯器您將使用Line類,但實際上並未使用它。 同樣,如果您(例如)返回Line *Line & (在某種程度上也是指針),它也應該起作用,因為編譯器將僅使用指針(無需知道指針的目標是什么) )。

另一方面,如果您嘗試在Shape類中實例化Line,則它將不起作用,因為C ++不知道Line的外觀,它具有什么樣的構造函數,等等。 因此,為了使它起作用,您應該在Line類的整個定義之后提供GetTangent方法的實現,如示例所示。

這是當您嘗試在Shape中使用Line時得到的結果: http ://ideone.com/YQOjQH另一方面,如果您在外部提取GetTangent的定義,它將起作用: http ://ideone.com/ 氧化鋯

您需要轉發聲明的Line ,然后從諸如GetTangent方法GetTangent其返回為引用或指針。 您無法將其返回我的值,因為編譯器不會看到Line的定義,因此不知道如何做。

通過指針或引用返回可能會很痛苦,因此您可能需要重新考慮您的類層次結構。 例如,讓LineShape派生會更加容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM