社区
C++ 语言
帖子详情
重载operator&之后
snailmmx
2003-08-22 08:05:17
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办?
另:这个类我没办法修改。
...全文
86
9
打赏
收藏
重载operator&之后
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办? 另:这个类我没办法修改。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++运算符
重载
例子
cout 在 date2
之后
" ; } else if (date1 ) { cout 在 date2 之前" ; } else { cout 两个日期相同" ; } // 计算日期差 days = date1 - date2; cout 两个日期相差 " 天" ; return 0; } ``` 通过以上实现...
复数类加减法运算符
重载
成员函数
之后
,我们利用加法和减法运算符
重载
来计算和与差,并通过友元函数`
operator
将结果输出到控制台。 这个例子展示了如何通过运算符
重载
成员函数实现复数类的加减法运算,使得用户可以像处理基本数据类型一样方便地...
C++之尽量不要
重载
&&,||或者,运算符(7)---《More Effective C++》
C++允许更具用户定义的类型,来定制&&或者||运算符,方法是
重载
operator
&&或者
operator
||,在全局
重载
或者每个类中进行
重载
。然而,如果我们
重载
之后
说什么问题呢?这场“权利的游戏”就被我们轻易修改了,这样我们...
重载
operator
new和
operator
delete
在类Foo中
重载
operator
new和
operator
delete。 class Foo { private: int _id; public: Foo() :_id(0) { cout << "Default Construct " << this <<...
《More Effective C++》《操作符——7、千万不要
重载
&&,||和,操作符》
《More Effective C++》条款7,不要
重载
&&、||、,运算符
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章