运算符重载转换运算符计划
民生理财 2021-08-24 13:33 字号: 大 中 小
为什么需要转换运算符? 我们大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。
转换运算符的生命方式比较特别,方法如下:
operator 类名();
转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值。
下面我看一个例子,看看它是如何工作的:
C++ 代码
#include iostream
using namespace std;
class Test
{
public:
Test(int a = 0)
{
coutthis\":\"\"载入构造函数!\"aendl;
Test::a = a;
}
Test(Test temp)
{
cout\"载入拷贝构造函数!\"endl;
Test::a = temp.a;
}
~Test()
{
coutthis\":\"\"载入析构函数!\"this-aendl;
t();
}
operator int()//转换运算符
{
coutthis\":\"\"载入转换运算符函数!\"this-aendl;
return Test::a;
}
public:
int a;
};
int main()
{
Test b(99);
天气转凉 cout\"b的内存地址\"bendl;
cout(int)bendl;//强转换
system(\"pause\");
}
在例子中我们利用转换运算符将Test类的对象强转换成了int类型并输出,注意观察转换运算符函数的运行状态,发现并没有产生临时对象,证明了它与普通函数并不相同,虽然它带有return语句。
在很多情况下,类的强转换运算符还可以作为类对象加运算重载函数使用,尽管他们的意义并不相同,下面的例子,就是利用转换运算符,将两个类对象转换成int后,相加并创建临时类对象,后再赋给另一个对象。
代码如下
C++ 代码
#include iostream
using namespace std;
class Test
{
public:
Test(int a = 0)
{
coutthis\":\"\"载入构造函数!\"aendl;
Test::a = a;
}
Test(Test temp)
{
cout\"载入拷贝构造函数!\"endl;
Test::a = temp.a;
}
~Test()
{
coutthis\":\"\"载入析构函数!\"this-aendl;
t();
}
operator int()
{
coutthis\":\"\"载入转换运算符函数的内存地址:\"this-aendl;
return Test::a;
}
public:
int a;
};
int main()
{
Test a(100),b(100),c;
cout\"a的内存地址\"a\" b的内存地址\"bendl;
c=Test((int)a+(int)b);//显示式转换
cout\"c的内存地址\"cendl;
ndl;
system(\"pause\");
}
代码中的c=a+b;属于隐式转换,它的实现过程与c=Test((int)a+(int)b);完全相同。
输卵管堵塞输卵管堵塞哪家好大庆治疗白癜风医院费用
两岁宝宝胃肠感冒腹泻不止
-
-
天津女排踏上复兴之路阵容重组陈丽怡仍是中
天津女排踏上复兴之路 阵容重组陈丽怡仍是中坚天津女排夺冠...
2020-07-07 | 民生理财
-
-
专家房产税征收受到九成以上政府官员阻挠搭配
专家:房产税征收受到九成以上政府官员阻挠 “要搞好房地产...
2020-06-06 | 民生理财
-
-
海南西环高速铁路正式试运行和谐号动车疾驰搭配
海南西环高速铁路正式试运行 和谐号动车疾驰前进 11月26日,...
2020-06-02 | 民生理财
-
-
北京市机动车停车条例搭配
北京市机动车停车条例(2018年3月30日北京市第十五届人民代表...
2020-05-31 | 民生理财
-
-
决胜局独揽分李盈莹表现出彩担任接应效果不搭配
决胜局独揽分李盈莹表现出彩 担任接应效果不佳李盈莹中国女...
2020-05-30 | 民生理财
-
-
特评从C罗到彩票佛爷的任性主帅为他背锅搭配
特评:从C罗到彩票!佛爷的任性 主帅为他背锅原标题:特评...
2020-05-29 | 民生理财