day 6 C++类间的类型转换
其他类到本类的转换
转换构造函数
class 目标类
{
目标类(const 源类 & 源类对象引用)
{
根据需求完成从源类型到目标类型的转换
}
}
**注:**这里的参数只有一个,否则不是转换构造函数,为普通构造函数。
例子:
#include<iostream>
using namespace std;
class B;
class A{
private:
int _x;int _y;
public:
//普通构造函数
A(int x,int y):_x(x),_y(y){};
//转换构造函数
A(const B&b);
};
class B{
private:
int _x;int _y;int _z;
public:
B(int x,int y,int z):_x(x),_y(y),_z(z){}
/*
* 声明友元类或者友元函数访问B的数据
*/
friend A;//friend A(const B&b);
};
A::A(const B&b){
_x=b._x;
_y=b._y;
}
源类内实现
类型转换操作符
class 源类{
operator 转化目标类(void)
{
根据需求完成从源类型到目标类型的转换
}
}
例子
class B;
class A{
private:
int _x;int _y;
public:
//普通构造函数
A(int x,int y):_x(x),_y(y){};
//类型转换操作符
operator B();
};
class B{
private:
int _x;int _y;int _z;
public:
B(int x,int y,int z):_x(x),_y(y),_z(z){}
};
A::operator B(){
return B(_x,_y,0);
}
关键字 explicit和implicit
在上述两种转换函数前加上expicit
则需要用显示转换static_cast<>()
implicit
声明为可隐式转换(系统默认为隐式)