类类型与其他类型的转换-创新互联
类型学转换成其他类型有两种方式:
目前累计服务客户上1000家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都网站设计、做网站、成都外贸网站建设公司、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。成都创新互联公司始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。一、用构造函数,将基本类型转为构造类型
1.用初始化的形式;
class X
{
public:
X(int n);
~X();
};
void f(X arg);
...
int main(){
X(3);
X=a;//a隐式调用构造函数X(int n);
f(5);//把5调用构造函数X(int n)转为X arg.然后调用构造函数。
return 0;
}
二、因为带参数的构造函数无法将类类型转为基本类型,所以设置类型转换函数
#include
using namespace std;
class rational
{
public:
rational();
rational(int n,int d=1);
rational(double x);//将double类型转换成类类型。
operator double();//将类类型转变为double类型,且注意其没有返回值。
friend rational& operator+(const rational&, const rational&);
friend ostream & operator <<( ostream& os, const rational&);
//注意这里输出类ostream前面不可以加const因为在输出流经过os时会修改os
//且类型一定是引用类型因为必须用cout对象本身
~rational();
private:
int numerator;
int denominator;
};
int gcd(int a, int b);
rational::rational()
{
numerator = 0;
denominator = 0;
}
rational::rational(int n,int d){
int g;
if (d == 1){
numerator = n;
denominator = d;
}
else{
g = gcd(n, d);//求分子分母的大公约数
numerator = n / g;//把分母化成最简;
denominator = d / g;
}
}
rational::rational(double x){
int a, b, g;
a = int(x*1e5);//x乘10的5次方。把小数变成整数
b = int(1e5);
g = gcd(a, b);
numerator = a / g;
denominator = b / g;
}
rational::~rational()
{
}
rational::operator double(){//虽然没有返回值依然要返回double类型的数。
return double(numerator) / double(denominator);
}
rational& operator +(const rational& a, const rational& b){
rational c;
int d = a.denominator*b.denominator;
int n = a.numerator*b.denominator + a.denominator*b.numerator;
int g = gcd(n, d);
c.denominator = d / g;//将分子分母化为最简
c.numerator = n / g;
return c;//返回类型是引用还是类类型都可以。
}
ostream& operator <<(ostream& os, const rational& a){
os << a.numerator;
if (a.denominator != 1){
os << "/" << a.denominator;
}
return os;//这里返回os类型的引用目的是连续使用cout<<"ss"<<"sss";
}
int gcd(int n, int d){//求大公约数的算法
if (d == 0) return n;
else{
return gcd(d, n%d);
}
}
int main(){
rational a(2, 4);
rational b = 0.3;
rational c = a + b;
cout << double(a) << "+" << double(b)<<"="< //将类类型对象a,b,c转换成double类型。 cout << a << "+" << b << "=" << c << endl; double x = b; c = x + 1 + 0.6; cout << x << "+" << 1 << "+" << 0.6 << "=" << c << endl; cout << rational(x) << "+" << rational(1) << "+" << rational(0.6) << "=" << c << endl; system("pause"); } 另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:类类型与其他类型的转换-创新互联
分享网址:http://scjbc.cn/article/iiedj.html