社区
C++ 语言
帖子详情
重载operator&之后
snailmmx
2003-08-22 08:05:17
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办?
另:这个类我没办法修改。
...全文
71
9
打赏
收藏
重载operator&之后
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办? 另:这个类我没办法修改。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sevecol
2003-08-23
打赏
举报
回复
下面的可能最安全
template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
int tt;
T* GetAddress(T* t)
{
return t;
}
public:
T* operator&()
{
return GetAddress(this);
};
};
return (static_cast<Point&>(t)).operator&();
};
sevecol
2003-08-23
打赏
举报
回复
template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
public:
T* operator&()
{
return (T*)this;
};
};
return (static_cast<Point&>(t)).operator&();
};
短歌如风
2003-08-22
打赏
举报
回复
啊!忘了用this了。如果不要求使用opreator&的话,sevecol的方法不错。
由于_com_ptr没有虚成员,也没有多继承,其时它的opreator&返回的还是和对象的指针值一样,就是多了一个讨厌的assert.去掉后强制转型一下就能用。
短歌如风
2003-08-22
打赏
举报
回复
找到_com_ptr中的自定义的operator&代码,把assert删掉就可以用了。不过你就要自己保证在调用CreateInstance时它的intf成员应该为NULL(未调用过CreateInstance、未赋值或调用了Release、赋了一个NULL值)
sevecol
2003-08-22
打赏
举报
回复
帮你封装了一个函数
template<typename T>
T* GetPoint(T& t)
{
class Point:public T
{
public:
Point* operator&()
{
return this;
};
};
Point& temp=static_cast<Point&>(t);
return (T*)(&temp);
};
sevecol
2003-08-22
打赏
举报
回复
class Base
{
int t;
public:
int operator&()
{
return 10;
};
};
class Test:public Base
{
public:
Test* operator&()
{
return this;
};
};
//
Base a;
Test& b=static_cast<Test&>(a);
Base* p=(Base*)(&b);
sandrowjw
2003-08-22
打赏
举报
回复
那就干脆跳过_com_ptr吧。
snailmmx
2003-08-22
打赏
举报
回复
呜呼,我用的正是_com_ptr
短歌如风
2003-08-22
打赏
举报
回复
没有办法。
如果你的类没有虚函数,还可以用取第一个成员的地址再强制转型来得到(不过很危险)。
运算符重载要少用,而operator&(取地址)根本不要重载。看一下这个贴子:
http://expert.csdn.net/Expert/TopicView1.asp?id=1709597
C++之尽量不要
重载
&&,||或者,运算符(7)---《More Effective C++》
与C一样,C++使用布尔表达式短路求值法,这表示一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也会停止运算。C++允许更具用户定义的类型,来定制&&或者||运算符,方法是
重载
operator
&&或者
operator
||,在全局
重载
或者每个类中进行
重载
。然而,如果我们
重载
之后
说什么问题呢?这场“权利的游戏”就被我们轻易修改了,这样我们将使用函数调用法替代了短路求值法,这样就丧失
重载
operator
new和
operator
delete
1.创建类Foo 在类Foo中
重载
operator
new和
operator
delete。 class Foo { private: int _id; public: Foo() :_id(0) { cout << "Default Construct " << this << " id = " << _id &l
C++ Primer阅读心得(第十四章)
1.不能
重载
的操作符 : : .* . ?:这四个。2.因为
重载
操作符并不能保证子表达式的求值顺序,所以&&和||的短路特性不能得到保证, , 的从左向右求值顺序也得不到保证,所以应避免
重载
&& ||和 , 。3.默认的
operator
&可以满足一般的使用要求,而
重载
operator
&
之后
会造成很多问题(尤其是返回类型与默认返回类型不一致时),所以除非特殊情况,避免
重载
op...
实用经验 73
重载
operator
=的陷阱
我们可通过
重载
内置的赋值运算符,实现用户自定义的数据类型也可具备内置数据类型的赋值运算能力,但是
重载
operator
=需要考虑:自赋值问题,勿忘记复制所有成员。还有应为深拷贝还是浅拷贝。
【C++初阶】类和对象——操作符
重载
&&const成员函数&&取地址
重载
&&日期类的实现
C++类和对象——运算符
重载
!!!&日期类的实现!!!&const成员!!!
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章