请问定义类型的自动转换

lymslive 2009-01-16 01:26:38
自己定义一个类,
通过构造函数可以把其他基本类型或其他类转换为这个类
但如何把这个类转换为其他类呢,需要在哪里定义

比如要把我写的一个类转换为int 或 string, 该怎么办?
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lann64 2009-01-19
  • 打赏
  • 举报
回复
用模板是可以实现,如果是为了提供转换函数,最好不要把模板用在类上。直接用在函数上就可以了。

class test
{
public:
template <class T>
operator T()
{
T t;
//...
return t;
}
};

只是,一般转换函数内部肯定是要做一些事的,对不同类型转换时,要做的事未必一样,这样的模板有多少实用价值还很难讲。
xxgamexx 2009-01-19
  • 打赏
  • 举报
回复


class YouClass
{
...
public:
int & operator int(){...}//这里就是定义到int类型的转换操作
};



如果这样写,起不每个类型都得自己定义一个?

是否可以用template?

可以考虑下下面这个:

template <class T>
class YouClass
{
..
public:
T & oerator T(){...}
};

我没试过,可以试试~

2,const与非const的就是能否自动转换呢

可以,但绝对不是一个好的想法

const转非const

const int a=4;
int b;
b=const_cast<int>a;
nullah 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoyisnail 的回复:]
比如,你要提供到int的转换

C/C++ code
class YouClass
{
...
public:
operator int(){...}//这里就是定义到int类型的转换操作
};
[/Quote]
只需要修改操作符返回类型 就可以了定义到不同类型的强制类型转换
xuruichen 2009-01-19
  • 打赏
  • 举报
回复
忘记了一点,类型转换可以减少重载操作符的个数。
xuruichen 2009-01-19
  • 打赏
  • 举报
回复
转换函数采用如下通用形式:

operator type();

这里,type 表示内置类型名、类类型名或由类型别名定义的名字。对任何可作为函数返回类型的类型(除了 void 之外)都可以定义转换函数。一般而言,不允许转换为数组或函数类型,转换为指针类型(数据和函数指针)以及引用类型是可以的。

重载操作符转换函数
apengxu 2009-01-18
  • 打赏
  • 举报
回复
受教了
lymslive 2009-01-18
  • 打赏
  • 举报
回复
const与非const的就是能否自动转换呢

因为读到很多文章书籍推荐用const限定……但我用const经常出现很烦的问题。
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
from c++ primer:
转换操作符是一种特殊的类成员函数。它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型:

class SmallInt {
public:
SmallInt(int i = 0): val(i)
{ if (i < 0 || i > 255)
throw std::out_of_range("Bad SmallInt initializer");
}
operator int() const { return val; }
private:
std::size_t val;
};

转换函数采用如下通用形式:

operator type();

这里,type 表示内置类型名、类类型名或由类型别名定义的名字。对任何可作为函数返回类型的类型(除了 void 之外)都可以定义转换函数。一般而言,不允许转换为数组或函数类型,转换为指针类型(数据和函数指针)以及引用类型是可以的。

xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
比如,你要提供到int的转换

class YouClass
{
...
public:
operator int(){...}//这里就是定义到int类型的转换操作
};
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
重载类型转换操作符

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧