2011-11-22 77 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'创建一个对象并忘记删除它,你只会得到内存泄漏。 –

相关问题