社区
C++ 语言
帖子详情
重载operator&之后
snailmmx
2003-08-22 08:05:17
一个类A重载了operator&,然后对于它的一个对象aaa,&aaa就成了去调用这个成员函数了。但现在我想取aaa的地址,自么办?
另:这个类我没办法修改。
...全文
69
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
flink kubernetes
operator
入门与实战
Flink Kubernetes
Operator
是一个基于 Kubernetes 的 Apache Flink 集群管理工具,它可以帮助用户在 Kubernetes 上轻松部署和管理 Flink 集群。本课程将介绍 Flink Kubernetes
Operator
的基本概念和使用方法。在本课程中,您将学习如何使用 Flink Kubernetes
Operator
部署和管理 Flink 集群。我将从 Flink Kubernetes
Operator
的基本概念开始,介绍如何在 Kubernetes 上安装和配置 Flink Kubernetes
Operator
。然后,我将介绍如何使用 Flink Kubernetes
Operator
部署和管理 Flink 集群,包括如何创建 Flink 集群、如何扩展和缩小 Flink 集群、如何升级 Flink k8s
operator
和 Flink 版本等。
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++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章