特殊的类型转换(单参构造,运算符重载)
来源:互联网 发布:淘宝卖家破损补寄 编辑:程序博客网 时间:2024/06/05 21:07
#include<iostream>//#include<stdio.h>using namespace std;class Test1{public:Test1(void){//无参构造 缺省构造 num = 0;}Test1(int n){cout << "Test1::constructor" << endl;num = n;}int & value(){return num;}private:int num;};class Test2{public:explicit Test2(int n){cout << "Test2::constructor" << endl;num = n;}int &value(){return num;}private:int num;};class Test3 {public: Test3(int n,int num111 = 0) {//这种情况也可能发生单参构造的类型转换cout << "Test3::constructor" << endl;num = n;num1 = num111;}int &value() {return num;}private:int num;int num1;};int main(){Test1 t1;cout << t1.value() << endl;Test1 t2(100);cout << t2.value() << endl;t2 = 1000;//t2 = Test1(1000);隐式类型转换cout << t2.value() << endl;Test2 T2(100);cout << T2.value() << endl;//T2 = 1000;//error 二进制“=”: 没有找到接受“int”类型的右操作数的运算符(或没有可接受的转换)T2 = Test2(1000);//只能显式的转换cout << T2.value() << endl;Test3 t3(100, 200); t3 = 250;cout << t3.value() << endl;getchar();return 0;}
#include<iostream>using namespace std;class Pointer2D{public:Pointer2D(int x,int y):m_x(x),m_y(y){}private:int m_x;int m_y;friend class Pointer3D;friend ostream & operator<<(ostream&os,Pointer2D const &p2);};class Pointer3D{public:Pointer3D(int x,int y,int z):m_x(x),m_y(y),m_z(z){}//在目标类型中定义从源类型的类型转换构造函数(拷贝构造) Pointer3D(Pointer2D const &p2):m_x(p2.m_x),m_y(p2.m_y),m_z(0){cout<<"Pointer3D(Pointer2D const &p2)"<<endl;}//p3 = p2//在源类型中定义到目标类型的类型转换运算符函数operator Pointer2D(void)const{cout<<"perator Pointer2D(void)const"<<endl;return Pointer2D(m_x,m_y);//}friend ostream & operator<<(ostream&os,Pointer3D const &p3);private:int m_x;int m_y;int m_z;};ostream & operator<<(ostream&os,Pointer3D const &p3){return os<<p3.m_x<<" "<<p3.m_y<<" "<<p3.m_z<<endl;}ostream & operator<<(ostream&os,Pointer2D const &p2){return os<<p2.m_x<<" "<<p2.m_y<<endl;}class Integer{public:Integer(int i = 0):m_i(i){}operator int (void)const{return m_i;}private:int m_i;};int main(){Pointer2D p2(1,2);cout<<p2<<endl;Pointer3D p3(4,5,6);cout<<p3<<endl;Pointer3D p31 = p2;//Pointer3D(Pointer2D const &p2)cout<<p31<<endl; p2 = p3;//p3.operator Pointer2D()//cout<<p2<<endl;//4 5 getchar();return 0;}
0 0
- 特殊的类型转换(单参构造,运算符重载)
- 特殊的运算符重载-----类型转换运算符重载
- 转换构造函数与类型转换运算符重载
- 类型转换构造函数隐式调用与运算符重载参数类型的不对应
- 复制构造函数、重载赋值运算符、类型转换小结
- 类型转换运算符重载
- 重载类型转换运算符
- (类型转换)运算符重载
- 类型转换运算符和指针运算符的重载
- 057day(流插入,流提取运算符和类型转换运算符的重载)
- 运算符重载的另一个解决方案:类型转换
- C++ 运算符重载 类类型的转换
- 【C++】强制类型转换运算符的重载
- 重载<<运算符,以及隐式的类型转换函数
- c++运算符重载之数据间的类型转换
- 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
- 特殊运算符重载
- 通过运算符重载实现类型转换
- java技术达人养成记<2>五年java学习路线规划建议
- Python3.3.2 算术运算----方法重写
- java技术达人成长记<3>WEB架构师成长之路(6年)
- 最后的王 Birkebeinerne (2016)
- 杭电oj编码2008
- 特殊的类型转换(单参构造,运算符重载)
- foreach()中的yield的使用
- Top K Frequent Elements
- 为AndroidStudio设置自定义类注释
- 杭电oj编码2007
- var的用法
- 常见拒绝服务型攻击原理及行为特征
- Leetcode 33. Search in Rotated Sorted Array
- Css与html三种结合方式 Css四种选择器