习题1
题目要求对例题12.1进行修改,将类的定义写到头文件(后缀为.h),类的成员函数声明部分写到源文件(后缀为.cpp)。
所以先打开396页看这道例题
一般每次的开头都先写的,现在只在main.cpp里写,其他的文件不用写上。
#include <iostream>
using namespace std;
因为最后其他的文件都得要包含到main函数所在的main.cpp文件里的。
相当于把以前每一个类的声明,类外成员函数的定义都独立剪切到一个文件里。
每个派生类都包含它所继承的类,最后在main.cpp文件里只需包含最终的派生类就可以了。
Ponit类
声明Point类
新建point.h 头文件
class Point //它是基类,所以不需要包含头文件
{
public:
Point(double a = 0, double b = 0): x(a), y(b){};
void setPoint(double a, double b) { x = a, y = b;}
double getX() const { return x;}
double getY() const { return y;}
friend ostream & operator << ( ostream &, const Point &);
protected:
double x;
double y;
};
类外定义Point类的成员函数
新建point.cpp文件
ostream & operator << ( ostream &output, const Point &p)
{
output << "(" << p.x <<"," <<p.y <<")"<<endl;
return output;
}
Circle类
声明Circle类
新建circle.h文件
#include "point.h" //包含了它继承的point基类
const double pi = 3.14159; //下面算面积的时候,pi就代表这个数值
class Circle: public Point
{
public:
Circle(double x=0, double y=0, double r=0):Point(x, y), radius(r){}
void setRadius(double r){ radius = r ;}
double getRadius() const { return radius;}
double area() const { return pi * radius * radius;}
friend ostream & operator << ( ostream &, const Circle &);
protected:
double radius;
};
类外定义Circle类的成员函数
新建circle.cpp文件
ostream & operator << ( ostream &output, const Circle &c)
{
output << "圆点 = (" << c.x << "," << c.y <<")" <<", r = " <<c.radius ;
output <<", 面积 = " << c.area() <<endl;
}
Cylinder类
声明Cylinder类
新建Cylinder.h文件
#include "circle.h" //包含了它继承的Circle类
class Cylinder : public Circle
{
public:
Cylinder (double x, double y, double r, double h):
Circle(x,y,r),height(h){}
void setHeight(double h) { height = h;}
double getHeight() { return height;}
double area() const
{
return 2*Circle::area() + 2 * pi * radius * height;
}
double volume() const
{
return Circle::area() * height;
}
friend ostream & operator << ( ostream &, const Cylinder &);
protected:
double height;
};
类外定义Cylinder类的成员函数
新建Cylinder.cpp文件
ostream & operator << ( ostream &output, const Cylinder &cy)
{
output << "圆点 = (" << cy.x << "," << cy.y <<")" <<", r = " <<cy.radius;
output << ", 表面积 =" << cy.area() << ", 体积 =" << cy.volume() <<endl;
return output;
}
写main函数
新建main.cpp文件
#include <iostream> //之前的做法,把类的声明和main函数都写在同一个文件,
using namespace std; //现在只不过是把它们分开而已,所以现在得按顺序包含进来
#include "cylinder.h" //先声明类,再在类外定义成员函数,所以的一个先包含声明类的头文件
#include "point.cpp" //类外成员函数的定义,按顺序包含进来就可以了
#include "circle.cpp"
#include "cylinder.cpp"
int main()
{
Cylinder cy(1.0, 2.0, 3.0, 4.0);
cout << cy ;
cy.setPoint(2.4 , 5.9);
cy.setRadius(13);
cy.setHeight(14);
cout << cy;
Point &pRef =cy;
cout << "点 =" << pRef<<endl;
Circle &cRef =cy;
cout << "圆 =" <<cRef <<endl;
return 0;
}