2012-06-24 53 views
1

可以說我有一類重載返回類型?

Class rofl { 
int a; 
float b; 
rofl::rofl(int a, float b) { 
    this->a = a; this->b = b; 
} 
} 

是有可能做

rofl* sup = new rofl(5, 2.0f); 
float hello = sup; 

使可變你好會得到sup.b的價值?

+1

這不會編譯。 'Class'關鍵字不應該以大寫字母開頭,'rofl ::'限定是不必要的......我非常想要低調。 –

回答

8

是的,你可以重載類型轉換操作符

class Rofl { 
public: 
    operator float() const { return b; } 

    ... 
}; 

的演示中看到http://ideone.com/Y7UwV

然而,請參閱Scott Meyers的More Effective C++的標題爲「」的第5項,以警惕用戶定義的轉換操作。允許來回複雜的類型隱式轉換通常會導致各種微妙的錯字錯誤。

1

你也可以去周圍的其他方法:

class rofl { 
public: 
    float operator=(float f) { b = f; return f; } 

    ... 
}; 

rofl sup(5, 2.0f); 
sup = 4.0f; 

demo,基於@Oli's answer

1

不,你說這是不可能的情況。在您的代碼中,sup不是rofl,而是rofl*,並且創建rofl*float轉換是不允許的。此外,你的問題是不健全的:sup.b不涉及任何事情。

也就是說,您可能不需要動態分配實例,在這種情況下,其他答案是正確的。