2011-11-22 26 views
0
class Demo 
{ 

     int num; 
     public: 
       Demo setMyValue(Demo *objx) 
       { 
        cout<<"\nEnter a number"; 
        cin>>(*objx).num; 
        return *objx; 
       } 
       ... 
}; 
  1. 什麼句話的意思「(*物objx).num」的背景?「(* objx).num」是什麼意思?「在此背景下下面

  2. 在程序中使用這種輸入方式是否是一種很好的編程習慣?

+3

爲什麼用5種不同的編程語言標記問題,其中大多數不適合您的演示代碼? –

+1

1)與'objx-> num'相同。 2)不,不要在C++中使用原始指針。 –

+0

@JonSkeet - 我可以饒舌並刪除其他4. –

回答

1

它是指針解引用操作符。

但是,它不是一個非常好的主意,首先不檢查NULL

0

*是解引用操作符。你也可以做objx->num(前提是objx != NULL)。此外,這是很好的風格。大多數人傾向於使用objx->num爲可讀性,但最終(*objx).num是等效的。但是,爲了返回對象本身的副本,return *objx是必要的。

+0

謝謝...我試過了,它工作! – tkg

0

其他人已將#1定義爲指針解引用操作符。

Re#2:它看起來像一個fluent interface的嘗試,但它會誤導用戶並可能導致內存泄漏。

Demo a = ...; 
Demo b = ...; 

a = a.setMyValue(b); // <- could be a leak 
+0

那裏沒有內存泄漏,除非'operator ='給出了一個。雖然返回該對象的副本很奇怪。 –

+0

@MikeSeymour:我的C++很弱。當a = a.setMyValue(b)'將它設置爲'b'(實際上改變它指向'b')時,原始'a'會發生什麼? –

+1

它使用相同的內存被新值覆蓋。如果你用'new'創建一個對象並忘記刪除它,你只會得到內存泄漏。 –

相關問題