![]() |
#2
jjg2010-08-10 12:47
|

//第一版例12.1 ( P396 )
#include <iostream>
using namespace std;
//声明类 Point
class Point
{
public:
Point( float x = 0,float y = 0); //有默认参数的构造函数
void setPoint( float,float); //设置坐标值
float getX( ) const { return x;} //读 x 坐标
float getY( ) const { return y;} //读 y 坐标
friend ostream & operator << ( ostream &,const Point &); //重载运算符
protected: //受保护成员
float x,y;
};
//下面定义 Point 类的成员函数
Point::Point( float a,float b) //Point 的构造函数
{ x = a; y = b;} //对 x,y 初始化
void Point::setPoint(float a,float b) //设置 x 和 y 的坐标
{ x = a; y = b;} //为 x,y 赋新值
ostream & operator << ( ostream &output,const Point &p) //重载运算符“ << ”,使之能输出点的坐标
{ output << "[" << p.x << "," << p.y << "]" << endl;
return output;
}
//第一次测试主函数
//int main( )
//{
// Point p(3.5,6.4); //建立 Point 类对象 p
// cout << "x = " << p.getX( ) << ", y = " << p.getY( ) <<endl; //输出 p 的坐标
// p.setPoint( 8.5,6.8); //重新设置 p 的坐标值
// cout << "p(new): " << p << endl;
// system("pause");
// return 0;
//}
//声明派生类 Circle
class Circle:public Point // circle 是 Point 类的公用派生类
{
public:
Circle( float x = 0,float y = 0,float r = 0); //构造函数
void setRadius( float); //设置半径值
float getRadius( ) const; //读取半径值
float area( ) const; //计算圆面积
friend ostream &operator << ( ostream &,const Circle &); //重载运算符 “ << ”
private:
float radius;
};
Circle::Circle( float a, float b, float r):Point( a,b),radius( r){ } //定义构造函数,对圆心和半径初始化
void Circle::setRadius( float r) //设置半径值
{ radius = r;}
float Circle::getRadius( ) const { return radius;} //计算圆面积
float Circle::area( ) const
{ return 3.14159 * radius * radius;}
ostream &operator << ( ostream &output,const Circle &c) //重载运算符“<<”,使之按规定的形式输出圆的信息
{ output << "Center = ["<< c.x <<","<<c.y<<"],r = ";
output <<c.radius<<",area = "<<c.area( )<<endl;
return output;
}
//第二次测试主函数
//int main( )
//{ Circle c( 3.5,6.4,5.2); //建立 Circle 类对象 c,并给定圆心坐标和半径
//cout<<"original circle:\nx = "<<c.getX( )<<",y =";
//cout<<c.getY( )<<",r ="<<c.getRadius( );
//cout<<",area ="<<c.area( )<< endl; //输出圆心坐标、半径和面积
//c.setRadius(7.5); //设置半径值
//c.setPoint( 5,5); //设置圆心坐标值 x,y
//cout<<"new circle:\n"<<c; //用重载运算符“<< ”输出圆对象的信息
//Point &pRef = c; //pRef 是 Point 类的引用变量,被 c 初始化
//cout<<"pRef:"<<pRef; //输出 pRef 的信息
//system("pause");
//return 0;
//}
//声明 Circle 的派生类 Cylinder
class Cylinder:public Circle // Cylinder 是 Circle 的公用派生类
{ public:
Cylinder(float x = 0,float y = 0,float r = 0,float h = 0); //构造函数
void setHeight(float); //设置圆柱高
float getHeight( ) const; //读取圆柱高
float area( ) const; //计算圆表面积
float volume( ) const; //计算圆柱体积
friend ostream& operator<<( ostream&,const Cylinder&); //重载运算符“<<”
protected:
float height; //圆柱高
};
Cylinder::Cylinder( float a, float b,float r, float h):Circle(a,b,r),height(h){ } //定义构造函数
void Cylinder::setHeight( float h){ height = h;} //设置圆柱高
float Cylinder::getHeight( ) const { return height;} //读取圆柱高
float Cylinder::area( ) const //计算圆柱表面积
{ return 2 * Circle::area( ) + 2 * 3.14159 * radius * height;}
float Cylinder::volume( ) const //计算圆柱体积
{ return Circle::area( ) * height;}
ostream &operator<<(ostream &output,const Cylinder& cy)
{ output<<"Center=["<<cy.x<<","<<cy.y<<"],r = "<<cy.radius<<",h = "<<cy.height
<<"\narea = "<<cy.area( )<<",volume = "<<cy.volume( ) <<endl;
return output;
}
//第三次测试主函数
int main( )
{
Cylinder cy1( 3.5,6.4,5.2,10); //定义 Cylinder 类对象 cy1
cout<<"\noriginal cylinder:\nx="<<cy1.getX( )<<",y = "<<cy1.getY( ) <<",r = "
<<cy1.getRadius( ) <<", h = " <<cy1.getHeight( ) << "\narea = "
<< cy1.area( )<<",volume = "<<cy1.volume() << endl; //用系统定义的运算符“<<”输出 cy1 的数据
cy1.setHeight( 15); //设置圆柱高
cy1.setRadius(7.5); //设置圆半径
cy1.setPoint( 5,5); //设置圆心坐标值
cout<<"\nnew cylinder:\n"<<cy1; //用重载运算符“<<”输出 cy1 的数据
Point &pRef = cy1; //pRef 是 Point 类对象的引用变量
cout<<"\npref as a Point:"<<pRef; //pRef 作为一个“点”输出
Circle &cRef = cy1; //cRef 是 Circle 类对象的引用变量
cout<<"\ncRef as a Circle:"<<cRef; //cRef 作为一个“圆”输出
return 0;
}
前两部分已经通过测试,最后这部分不知道为什么出错了,提示不能访问私有成员函数,可我这是公有继承呀!请高师帮帮忙,先谢了! #include <iostream>
using namespace std;
//声明类 Point
class Point
{
public:
Point( float x = 0,float y = 0); //有默认参数的构造函数
void setPoint( float,float); //设置坐标值
float getX( ) const { return x;} //读 x 坐标
float getY( ) const { return y;} //读 y 坐标
friend ostream & operator << ( ostream &,const Point &); //重载运算符
protected: //受保护成员
float x,y;
};
//下面定义 Point 类的成员函数
Point::Point( float a,float b) //Point 的构造函数
{ x = a; y = b;} //对 x,y 初始化
void Point::setPoint(float a,float b) //设置 x 和 y 的坐标
{ x = a; y = b;} //为 x,y 赋新值
ostream & operator << ( ostream &output,const Point &p) //重载运算符“ << ”,使之能输出点的坐标
{ output << "[" << p.x << "," << p.y << "]" << endl;
return output;
}
//第一次测试主函数
//int main( )
//{
// Point p(3.5,6.4); //建立 Point 类对象 p
// cout << "x = " << p.getX( ) << ", y = " << p.getY( ) <<endl; //输出 p 的坐标
// p.setPoint( 8.5,6.8); //重新设置 p 的坐标值
// cout << "p(new): " << p << endl;
// system("pause");
// return 0;
//}
//声明派生类 Circle
class Circle:public Point // circle 是 Point 类的公用派生类
{
public:
Circle( float x = 0,float y = 0,float r = 0); //构造函数
void setRadius( float); //设置半径值
float getRadius( ) const; //读取半径值
float area( ) const; //计算圆面积
friend ostream &operator << ( ostream &,const Circle &); //重载运算符 “ << ”
private:
float radius;
};
Circle::Circle( float a, float b, float r):Point( a,b),radius( r){ } //定义构造函数,对圆心和半径初始化
void Circle::setRadius( float r) //设置半径值
{ radius = r;}
float Circle::getRadius( ) const { return radius;} //计算圆面积
float Circle::area( ) const
{ return 3.14159 * radius * radius;}
ostream &operator << ( ostream &output,const Circle &c) //重载运算符“<<”,使之按规定的形式输出圆的信息
{ output << "Center = ["<< c.x <<","<<c.y<<"],r = ";
output <<c.radius<<",area = "<<c.area( )<<endl;
return output;
}
//第二次测试主函数
//int main( )
//{ Circle c( 3.5,6.4,5.2); //建立 Circle 类对象 c,并给定圆心坐标和半径
//cout<<"original circle:\nx = "<<c.getX( )<<",y =";
//cout<<c.getY( )<<",r ="<<c.getRadius( );
//cout<<",area ="<<c.area( )<< endl; //输出圆心坐标、半径和面积
//c.setRadius(7.5); //设置半径值
//c.setPoint( 5,5); //设置圆心坐标值 x,y
//cout<<"new circle:\n"<<c; //用重载运算符“<< ”输出圆对象的信息
//Point &pRef = c; //pRef 是 Point 类的引用变量,被 c 初始化
//cout<<"pRef:"<<pRef; //输出 pRef 的信息
//system("pause");
//return 0;
//}
//声明 Circle 的派生类 Cylinder
class Cylinder:public Circle // Cylinder 是 Circle 的公用派生类
{ public:
Cylinder(float x = 0,float y = 0,float r = 0,float h = 0); //构造函数
void setHeight(float); //设置圆柱高
float getHeight( ) const; //读取圆柱高
float area( ) const; //计算圆表面积
float volume( ) const; //计算圆柱体积
friend ostream& operator<<( ostream&,const Cylinder&); //重载运算符“<<”
protected:
float height; //圆柱高
};
Cylinder::Cylinder( float a, float b,float r, float h):Circle(a,b,r),height(h){ } //定义构造函数
void Cylinder::setHeight( float h){ height = h;} //设置圆柱高
float Cylinder::getHeight( ) const { return height;} //读取圆柱高
float Cylinder::area( ) const //计算圆柱表面积
{ return 2 * Circle::area( ) + 2 * 3.14159 * radius * height;}
float Cylinder::volume( ) const //计算圆柱体积
{ return Circle::area( ) * height;}
ostream &operator<<(ostream &output,const Cylinder& cy)
{ output<<"Center=["<<cy.x<<","<<cy.y<<"],r = "<<cy.radius<<",h = "<<cy.height
<<"\narea = "<<cy.area( )<<",volume = "<<cy.volume( ) <<endl;
return output;
}
//第三次测试主函数
int main( )
{
Cylinder cy1( 3.5,6.4,5.2,10); //定义 Cylinder 类对象 cy1
cout<<"\noriginal cylinder:\nx="<<cy1.getX( )<<",y = "<<cy1.getY( ) <<",r = "
<<cy1.getRadius( ) <<", h = " <<cy1.getHeight( ) << "\narea = "
<< cy1.area( )<<",volume = "<<cy1.volume() << endl; //用系统定义的运算符“<<”输出 cy1 的数据
cy1.setHeight( 15); //设置圆柱高
cy1.setRadius(7.5); //设置圆半径
cy1.setPoint( 5,5); //设置圆心坐标值
cout<<"\nnew cylinder:\n"<<cy1; //用重载运算符“<<”输出 cy1 的数据
Point &pRef = cy1; //pRef 是 Point 类对象的引用变量
cout<<"\npref as a Point:"<<pRef; //pRef 作为一个“点”输出
Circle &cRef = cy1; //cRef 是 Circle 类对象的引用变量
cout<<"\ncRef as a Circle:"<<cRef; //cRef 作为一个“圆”输出
return 0;
}