operator重载运算符问题
template<classTYPE>classCThreadLocal{public:TYPE*GetData(){};operatorTYPE*()/////////...
template<class TYPE>
class CThreadLocal {
public:
TYPE* GetData(){};
operator TYPE*()/////////////////////////////////////////////////////////////////////////
{ return GetData(); }
TYPE* operator->()///////////////////////////////////////////////////////////////////////
{ return GetData(); }
}
//迷糊了,什么时候会调用那两个重载运算符...
我问的是什么时候用到,也就是举个例子而已 展开
class CThreadLocal {
public:
TYPE* GetData(){};
operator TYPE*()/////////////////////////////////////////////////////////////////////////
{ return GetData(); }
TYPE* operator->()///////////////////////////////////////////////////////////////////////
{ return GetData(); }
}
//迷糊了,什么时候会调用那两个重载运算符...
我问的是什么时候用到,也就是举个例子而已 展开
4个回答
2011-04-01
展开全部
果表明,语句CBase::operator =(son);并没有调用父类的CBase& operator=(int v)赋值运算符函数,你可以在CBase& operator=(int v)这个函数里输出一个字符来测试,本人没有发现他调用过这个语句。
CBase::operator =(son);因此,依据推测可能调用了父类的默认的赋值运算符
再次确认
CBase::operator =(son);肯定是调用了基类的默认赋值运算符,你可以通过语句来测试CBase cb1,cb2; cb1.set_iValue(7); cb2=cb1;可以看到cb1是可以使用赋值运算符赋给cb2的,因此基类的默认赋值运算符是存在的,因此你虽然重载了基类的赋值运算符,但是基类的默认的赋值运算符,其形式为CBase& operator=(const CBase& obj)仍然是存在的,没有被覆盖。所以CBase::operator =(son);是百分之百的调用的基类的默认赋值运算符。
另外,站长团上有产品团购,便宜有保证
CBase::operator =(son);因此,依据推测可能调用了父类的默认的赋值运算符
再次确认
CBase::operator =(son);肯定是调用了基类的默认赋值运算符,你可以通过语句来测试CBase cb1,cb2; cb1.set_iValue(7); cb2=cb1;可以看到cb1是可以使用赋值运算符赋给cb2的,因此基类的默认赋值运算符是存在的,因此你虽然重载了基类的赋值运算符,但是基类的默认的赋值运算符,其形式为CBase& operator=(const CBase& obj)仍然是存在的,没有被覆盖。所以CBase::operator =(son);是百分之百的调用的基类的默认赋值运算符。
另外,站长团上有产品团购,便宜有保证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个时候调用:
CThreadLocal<int> x;
some = (int*)x; -->调用operator TYPE*()
some = x->some_member; -->调用operator->()
你可以看看<More Effective C++>中关于智能指针的一章
CThreadLocal<int> x;
some = (int*)x; -->调用operator TYPE*()
some = x->some_member; -->调用operator->()
你可以看看<More Effective C++>中关于智能指针的一章
更多追问追答
追问
TYPE* operator->()
//为什么要加上TYPE*
//还有()里不用定义参数的吗?
追答
->运算符似乎没有参数吧,呵呵,至于TYPE*那是返回值啊,返回的是一个原生指针.
CThreadLocal x;
x->some_func();//这句被编译器解释为:(x.operator->())->some_func();
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样的话是优先采取用你所重载功能。也就是说,如果你用a*b的话,*的功能已经不是默认的了,而是你所要求的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
operator* Allows a smart pointer object to act as though it were the actual encapsulated interface when dereferenced.
operator-> Allows a smart pointer object to act as though it were the actual encapsulated interface when dereferenced.
operator-> Allows a smart pointer object to act as though it were the actual encapsulated interface when dereferenced.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询