首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 运算符重载的有关问题。可能是低级有关问题,求人解答

2013-07-09 
C++ 运算符重载的问题。可能是低级问题,求人解答。class Handle VALUE_OBJ_CLASS_SPEC { private:oop* _hand

C++ 运算符重载的问题。可能是低级问题,求人解答。

class Handle VALUE_OBJ_CLASS_SPEC {
 private:
  oop* _handle;

 protected:
  oop     obj() const                            { return _handle == NULL ? (oop)NULL : *_handle; }
  oop     non_null_obj() const                   { assert(_handle != NULL, "resolving NULL handle"); return *_handle; }

 public:
  // Constructors
  Handle()                                       { _handle = NULL; }
  Handle(oop obj);
#ifndef ASSERT
  Handle(Thread* thread, oop obj);
#else
  // Don't inline body with assert for current thread
  Handle(Thread* thread, oop obj);
#endif // ASSERT

  // General access
  oop     operator () () const                   { return obj(); }
  oop     operator -> () const                   { return non_null_obj(); }
  bool    operator == (oop o) const              { return obj() == o; }
  bool    operator == (const Handle& h) const          { return obj() == h.obj(); }

  // Null checks
  bool    is_null() const                        { return _handle == NULL; }
  bool    not_null() const                       { return _handle != NULL; }



  // Debugging
  void    print()                                { obj()->print(); }

  // Direct interface, use very sparingly.
  // Used by JavaCalls to quickly convert handles and to create handles static data structures.
  // Constructor takes a dummy argument to prevent unintentional type conversion in C++.
  Handle(oop *handle, bool dummy)                { _handle = handle; }

  // Raw handle access. Allows easy duplication of Handles. This can be very unsafe
  // since duplicates is only valid as long as original handle is alive.
  oop* raw_value()                               { return _handle; }
  static oop raw_resolve(oop *handle)            { return handle == NULL ? (oop)NULL : *handle; }
};



上面这是一个类,其中好像是重载了->和()。
那么假设有个Handle对象obj,下面这句话是什么呢。
obj->klass()


求帮助,我是搞JAVA的,对C++的运算符重载不是特别清楚,下面那两个==的重载我是看懂了,可是上面的->和()就完全不明白了,而且百度了一下,好像有说->不能重载的。
可是这是JAVA虚拟机的源码,不可能出错吧。
求解释。

在线等。 C++ 重载 运算符重载 ->重载
[解决办法]
已经重载了->和函数调用运算符()

oop     operator () () const                   { return obj(); }
  oop     operator -> () const                   { return non_null_obj(); }




obj->klass();


看起不是一个正确的语句。 

[解决办法]
返回的是对象的地址
[解决办法]
-> 重载的是指针的 返回的是对象的地址  

热点排行