簡體   English   中英

C++ 為什么你需要返回一個指針來利用協方差?

[英]C++ Why do you need to return a pointer to take advantage of covariance?

我有一個超類Block和一個派生類LLeftPiece

塊.h

class Block
{

public:
  Block();
  ~Block();
  virtual Block* rotate(){}; //override
};

LLeftPiece.h

class LLeftPiece : public Block
{
public:
    static const BLOCK_COLOR color = COLOR_WHITE;
    LLeftPiece* rotate() override; 
    LLeftPiece();
    LLeftPiece(const LLeftPiece &obj); 
    ~LLeftPiece(); 
};

我有一個虛擬函數 rotate ,我想返回該塊的新副本但已旋轉。 在我的情況下,我返回一個指向這個新作品的指針。 我寧願只返回一個LLeftPiece的實例,但編譯器抱怨說它與Block沒有協方差。 當我返回一個指針時,它工作正常。 為什么我需要返回一個指針而不是類的一個實例?

基本上我在問為什么virtual Block rotate()無效?

C++ 為什么你需要返回一個指針來利用協方差?

這並不十分准確。 如果您改為使用引用,則不需要指針。 換句話說:間接是協方差所必需的。 更一般地說,任何運行時多態都需要間接。

LLeftPiece類型的值不是Block類型的值。 這可能會讓那些來自沒有值語義且間接隱含的面向對象語言的人感到困惑。 LLeftPiece*是一個指針,指向具有Block類型的基子對象的對象,並且LLeftPiece*隱式轉換為Block* ,這允許協方差起作用。

暫無
暫無

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

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