返回信息流网上搜到一个代码
C++可能通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示
class A
{
public:
operator B* () { return this->b_;}
operator const B* () {return this->b_;}
operator B& () {return *this->b_;}
private:
B* b_;
};
A a;
当if(a),编译时,其中它转换成if(a.operator B*()),其实也就是判断 if(a.b_)
不知道什么意思。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #18601同步于 2009/1/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
类的转换函数 是什么意思啊?
xiecaiji
2009/1/12镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
去307问那里的一众大小牛不就好了~~
当if(a),编译时,其中它转换成if(a.operator B*()),这个我还真不知道
这个的应用就是拿一个A类作接口,隐藏B类吧
就是可以把一个类型的对象自动地变成另外一个类型的对象。
比如你的一个函数 f() ,参数需要为 B 类型的对象,但是你如果在A 类中定义了
operator B()
的话,你直接使用 f(a) ,编译器就会把 a 自动转变成 B 类型的对象进行函数计算。
#include<cstdio>
#include<cstring>
using namespace std;
class MyString {
char *buffer;
int sz;
public:
MyString() {
sz=1024;
buffer = new char[sz];
}
~MyString() {
delete [] buffer;
}
operator char* () { // 这就是定义如果你要把你的类强制转换成字符串指针的时候应该做什么。
return buffer;
}
};
int main() {
MyString ms;
strcpy(ms,"Hello"); // 看,我把我的MyString类当成char*来用。
strcat(ms," world!");
puts(ms); // 输出"Hello world!"
return 0;
}