29.c/c++程序员面试宝典-类型转换构造函数

29.c/c++程序员面试宝典-类型转换构造函数

类型转换构造函数可以将其他类型直接转换为类的对象,是一种很方便的构造函数。



面试题114   类型转换有哪些分类**


分析:表达式是否合法取决于操作数的类型,而且合法的表达式其含义也由其操作数类型决定。但是,在c++中,某些类型之间存在相关的依赖关系。若两种类型相关,则可在需要某种类型的操作数位置上,使用该类型的相关类型对象或值。如果两个类型之间可以相互转换,则称这两个类型相关。


在c++中,类型转换有隐式转换和显式转换两种。显式转换也称为强制类型转换,它具有一定的危险性。


【答案】在c++中,类型转换有隐式转换和显示转换两种。



面试题115  什么是类型转换构造函数**


分析:类型转换构造函数是一种特殊的构造函数,如果一个类的构造函数只有一个参数,而且这个参数不是该类的类型而是其他类型,这个构造函数就称为类型转换构造函数。如果程序代码现在创建时指定某一个数据成员的值,而让其他域中的值使用相同的默认值,转换构造函数就很有用。


一个类型转换构造函数的示例代码如下:

#include<iostream.h>

#include<math.h>   //math.h包括sin,cos等

class Polar   //极坐标中的点

{

private:

double radius;  //定义极径变量

double angle;  //定义极角变量

public:

Polar()

{

radius=0.0;

angle=0.0;

}

Polar(double r,double a)

{

radius=r;

angle=a;

}

void display()

{cout<<"("<<radius<<","<<angle<<")";}

double getr()

{return radius;}

double geta()

{return angle;}

}

class Rec

{

private:

double xco;  //定义x坐标变量

double yco;  //定义y坐标变量

public:

Rec()

{

xco=0.0;

yco=0.0;

}

Rec(Polar p)

{

float r=(float)p.getr();  //从polar对象中获得极径和极角

float a=(float)p.geta();  

xco=r*cos(a);   //变成x坐标和y坐标

yco=r*sin(a);

}

void display()

{cout<<"("<<xco<<","<<yco<<")";}

}

void main()

{

Rec rec;

Polar pol(10.0,0.785398);

rec=pol;  //使用转换函数(或rec=Rec(pol))

cout<<"\nPol=";

pol.display();  //显示原始极坐标

cout<<"\Rec=";

rec.display();  //显示等价的直角坐标

}


上面代码是完成极坐标到直角坐标的转换,polar类中的数据radius和angle是私有的,因此必须提供函数直接访问。


【答案】一个类的构造函数只有一个参数,而且这个参数不是该类的类型而是其他类型,这个构造函数就被称为类型转换构造函数,转换构造函数可以用来处理不同域的同一个数据值。



你可能感兴趣的:(C++,C语言)