侵权投诉
订阅
纠错
加入自媒体

C++之类型转换函数

2020-08-29 16:49
TXP嵌入式
关注

2、类类型之间的转换:

这个问题也是之前我们上面简单的测试,不能进行类类型之间的转换;现在我们学习了类型转换函数,是可以进行转换的:

代码版本一:

#include <iostream>
#include <string>
using namespace std;
class Test;
class Value

public:
   Value()
   {
   }
   explicit Value(Test& t)
   {
   }
};
class Test

   int mValue;
public:
   Test(int i = 0)
   {
       mValue = i;
   }
   int value()
   {
       return mValue;
   }
   operator Value()
   {
       Value ret;
       cout << "operator Value()" << endl;
       return ret;
   }
工程上通过以下方式;
 Value toValue()
 {
     Value ret;
     
     return ret;
 
 }
};
int main()
{  
   Test t(100);
   Value v = t;
   
   return 0;

输出结果(编译通过):

root@txp-virtual-machine:/home/txp# g++ test.cpp
root@txp-virtual-machine:/home/txp#

注意:这里还有一种让编译器犯难的转换写法;我们上面这样写是用explicit关键字屏蔽了Value类里面的隐式转换,所以不会犯难,下面是犯难的代码示例:

#include <iostream>
#include <string>
using namespace std;
class Test;
class Value

public:
   Value()
   {
   }
    Value(Test& t)
   {
   }
};
class Test

   int mValue;
public:
   Test(int i = 0)
   {
       mValue = i;
   }
   int value()
   {
       return mValue;
   }
   operator Value()
   {
       Value ret;
       cout << "operator Value()" << endl;
       return ret;
   }
};
int main()
{  
   Test t(100);
   Value v = t;
   
   return 0;

输出结果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:42:15: error: conversion from ‘Test’ to ‘Value’ is ambiguous
    Value v = t;
              ^
test.cpp:41:10: note: candidates are:
    Test t(100);
         ^
test.cpp:31:5: note: Test::operator Value()
    operator Value()
    ^
test.cpp:14:6: note: Value::Value(Test&)
     Value(Test& t)

3、小结:

无法抑制隐式的类型转换函数调用

类型转换函数可能与转换构造函数起冲突

当然工程中可能比较习惯用 Type toType()的公有成员代替类型转换函数(就是换了种写法)

好了,今天的分享就到这里,如果文章中有错误或者不理解的地方,可以交流互动,一起进步。我是txp,下期见!

<上一页  1  2  3  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

电子工程 猎头职位 更多
扫码关注公众号
OFweek电子工程网
获取更多精彩内容
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号