www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第6章/s6_18/smain6_18.cpp
//Download by http://www.NewXing.com //文件名:smain6_18.cpp //构造函数类型转换函数。以下程序只在直角坐标的第一象限考虑问题 #include <iostream> #include <math.h> using namespace std; const double PI = 3.14; class CVector; class CPoint //定义直角点坐标类 { friend CVector; friend ostream &operator << (ostream &s, CPoint obj); public: CPoint(double dX=0, double dY=0); operator CVector( ); //类类型转换函数 private: double m_dX; //x坐标 double m_dY; //y坐标 }; class CVector //定义极坐标类 { friend CPoint ; friend ostream &operator << (ostream &s, CVector obj); public: CVector(double dP=0, double dSeta=0); operator CPoint( ); //类类型转换函数 private: double m_dP; //极半径 double m_dSeta; //极角 }; ostream &operator << (ostream &s, CPoint obj) { s << "X坐标为:" << obj.m_dX << "; Y坐标为:" << obj.m_dY << "\n"; return s; } CPoint::CPoint(double dX, double dY) { m_dX = dX; m_dY = dY; } CVector::operator CPoint( ) { CPoint oCPoint; oCPoint.m_dX = m_dP * cos(m_dSeta); //得到x坐标 oCPoint.m_dY = m_dP * sin(m_dSeta); //得到y坐标 return oCPoint; } ostream &operator << (ostream &s,CVector obj) { s << "极径=" << obj.m_dP << "; 极角=" << obj.m_dSeta << "弧度。" << "\n"; return s; } CVector::CVector(double dP, double dSeta) { m_dP = dP; m_dSeta = dSeta; } //sqrt( )是math.h库里面的求平方根的函数 //atan( )是math.h库里的求反正切函数,tan( )则是求正切函数,单位都是弧度 CPoint::operator CVector( ) { CVector oCVector; oCVector.m_dP = sqrt(m_dX*m_dX + m_dY*m_dY); //求极径 oCVector.m_dSeta = atan(m_dY/m_dX); //求极角 return oCVector; } void main() { double dSeta; dSeta = 2*PI*30/360; //30度角的弧度值 CPoint oCPoint(2.0, 2.0), oCPoint2; CVector oCVector(4.0, dSeta), oCVector2; // cout << oCPoint << oCPoint2; cout << oCVector << oCVector2; oCPoint2 = CPoint(oCVector); //将CVector转换为CPoint oCVector2 = CVector(oCPoint); //将CPoint转换为CVector cout << oCPoint << oCPoint2; cout << oCVector << oCVector2 << endl; }