C++关于"类与对象"的几道题

4.1 实现一个三维坐标的Point类。包含一个构造函数,一个拷贝构造函数,一个将点变为相对于原点的对称点的negate函数,一个返回该点到原点(0,0,0)距离的函数norm和一个输出点坐标的函数print。

测试程序:
int main()
{ Point p(10,-5,4);
cout << "p = ";
p.print();
cout << ", p.norm() = " << p.norm() << endl;
p.negate();
cout << "p = ";
p.print();
cout << ", p.norm() = " << p.norm() << endl;
return 0;
}
程序运行结果为:
p = (10,-5,4), p.norm() = 11.8743
p = (-10,5,-4), p.norm() = 11.8743

4.2 实现一个时间类Time。将小时,分钟和秒存储为int型。包含一个构造函数,访问用的函数,一个推进当前时间的函数adv (),一个重新设置当前时间的函数reset()和输出结果函数print().
测试程序:
int main()
{ Time t(12,52,01);
t.print();
cout << endl;
t.adv();
t.print();
cout << endl;
t.adv(3,5,2);
t.print();
cout << endl;
return 0;
}
程序运行结果为:
12:52:1
12:52:2
15:57:4
4.3 实现一个zrf_Ratio类,这个类的每个对象将表示一个分数。在该类中,两个数据成员分别用于存储分数的分子和分母。函数成员中包含一个设置分子和分母的函数assign(),转换成double 类型数值的函数convert(),分子和分母交换函数invert()和一个输出分数的函数print()。
测试程序:
int main()
{ zrf_Ratio z;
z.assign(22,7);
cout << "z = ";
z.print();
cout << " = " << z.convert() << endl;
z.invert();
cout << "1/z = ";
z.print();
cout << endl;
return 0;
}
程序运行结果为:
z = 22/7 = 3.14286
1/z = 7/22

上面的程序实在是问题多,给你写了个!
1.Point类
class Point
{
public:
Point(int a=0,int b=0,int c=0):x(a),y(b),z(c){}
Point(Point& p):x(p.x),y(p.y),z(p.z){}
void negate(){x=-x,y=-y,z=-z;}
double norm(){return sqrt(x*x+y*y+z*z);}
//2点距离公式 d=√[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2]
void print(){cout<<"("<<x<<","<<y<<","<<z<<")";}
private:
double x,y,z;
};

2.Time类
class Time
{
public:
Time(int h=0,int m=0,int s=0):hour(h),minute(m),second(s){}
int Gethour(){return hour;}
int Getminute(){return minute;}
int Getsecond(){return second;}
void adv(int,int,int);//默认增加1秒
void reset(int h,int s,int m){hour=h,minute=m,second=s;}
void print()const{cout<<hour<<":"<<minute<<":"<<second<<endl;}
private:
int hour,minute,second;
};
//------------------------------------------------------------------------------
void Time::adv(int h=0,int m=0,int s=1)//默认增加1秒
{
hour+=h;minute+=m;second+=s;
if(second>=60)minute++,second=0;
if(minute>=60)hour++,minute=0;
if(hour>=24)hour=0;
}//-------------------------------------------------------------------
---------
如果你的adv()函数是想实现时间动态滚动,那有点难.估计应该不是这意思.

3.zrf_Ratio类
class zrf_Ratio
{
public:
void assign(int n,int b){num=n;ben=b;}
double convert()const{return double(num)/ben;}
void invert(){int Temp=num;num=ben;ben=Temp;}
void print()const{cout<<num<<"/"<<ben;}
private:
int num,ben;
};

主程序就用原题的,所有结果与原体一样(Dev c++测试通过)
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-01
1.#include<iostream>
#include<cmath>
using namespace std;
class Point
{
int x,y,z;
public:
Point(int xx, int yy, int zz)
{
x=xx;
y=yy;
z=zz;
}
Point(Point& p)
{
x=p.x;
y=p.y;
z=p.z;
}
void negate()
{
x=-x;
y=-y;
z=-z;
}
double norm()
{
return sqrt(x*x+y*y+z*z);
}
void print()
{
cout<<'('<<x<<','<<y<<','<<z<<')';
}
};
2.#include<iostream>
using namespace std;
class Time
{
int hour,min,sec;
public:
Time(int h,int m,int s)
{
hour=h;
min=m;
sec=s;
}
void adv()
{
sec=sec+1;
}
void adv(int x,int y,int z)
{
hour=hour+x;
min=min+y;
sec=sec+z;
}
void reset()
{
hour=0;
min=0;
sec=0;
}
void print()
{
cout<<hour<<':'<<min<<':'<<sec<<endl;
}
};
3.#include<iostream>
using namespace std;
class Ratio
{
int xx,yy;
public:
void assign(int x,int y)
{
xx=x;
yy=y;
}
double convert()
{
return double (xx*1.0/(yy*1.0));
}
void invert()
{
int temp=xx;
xx=yy;
yy=temp;
}
void print()
{
cout<<xx<<'/'<<yy;
}
};
相似回答