#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
public:
Circle(double r = 0);
Circle(const Circle& r);
~Circle();
void SetRadius(double radius = 0);
double GetRadius(void);
double GetArea(void);
double GetPerimeter(void);
friend class CircularCylinder;//我要访问你的数据,你就要把俺定义为友元类
private:
double radius;
static const double Pi;//static静态:类名::成员可以全局访问,static 即使定义在函数中改变,函数执行结束,他仍能保存值,不会消失
};
#endif // !CIRCLE_H
#include <iostream>
#include "Circle.h"
using namespace std;
const double Circle::Pi = 3.14;
Circle::Circle(double r) :/*Pi(3.14159),*/ radius(r)
{
cout << "构造圆成功" << endl;
cout << "构造圆半径" << this->radius << endl;
cout << "--------------------"<< endl;
}
Circle::Circle(const Circle& c)/* :Pi(c.Pi)*/ {
this->radius = c.radius;
cout << "拷贝构造圆成功" << endl;
cout << "拷贝构造圆半径" << this->radius << endl;
cout << "--------------------" << endl;
}
void Circle::SetRadius(double radius) {
this->radius = radius;
}
double Circle::GetRadius(void) {
return this->radius;
}
double Circle::GetArea(void) {
return Pi * radius * radius;
}
double Circle::GetPerimeter(void) {
return 2 * Pi * radius;
}
Circle::~Circle()
{
cout << "析构圆完成" << endl;
}
#ifndef CIRCULARCYLINDER_H
#define CIRCULARCYLINDER_H
#include "Circle.h"
class CircularCylinder
{
public:
CircularCylinder(double high, double radius);
CircularCylinder(double high, const Circle& circle);
CircularCylinder(const CircularCylinder& CC);
double GetVolume(void);
double GetArea(void);
~CircularCylinder();
private:
double high;
Circle c;
};
#endif // !
#include <iostream>
#include "CircularCylinder.h"
using namespace std;
CircularCylinder::CircularCylinder(double high, double radius) :c(radius)
{
this->high = high;
cout << "构造圆柱体成功" << endl;
cout << "圆柱体底面半径:" << c.radius << endl;
cout << "圆柱体高:" << high << endl;
cout << "--------------------" << endl;
}
CircularCylinder::CircularCylinder(double high, const Circle& circle):c(circle) {
this->high = high;
cout << "构造圆柱体成功" << endl;
cout << "圆柱体底面半径:" << c.radius << endl;
cout << "圆柱体高:" << high << endl;
cout << "--------------------" << endl;
}
CircularCylinder::CircularCylinder(const CircularCylinder& CC):c(CC.c) {
{
this->high = CC.high;
cout << "拷贝构造圆柱体成功" << endl;
cout << "圆柱体底面半径:" << c.radius << endl;
cout << "圆柱体高:" << high << endl;
cout << "--------------------" << endl;
}
}
double CircularCylinder::GetVolume(void) {
return this->c.GetArea()* high;
}
double CircularCylinder::GetArea(void) {
return this->high * c.GetPerimeter() + 2 * c.GetArea();
}
CircularCylinder::~CircularCylinder()
{
cout << "析构圆柱体完成" << endl;
}
#include<iostream>
#include "CircularCylinder.h"
using namespace std;
int main() {
Circle c1(1);
Circle c2(c1);
CircularCylinder cc1(1, c2);
CircularCylinder cc2(3, 4);
CircularCylinder cc3(cc2);
cout << cc1.GetArea() << endl;
cout << cc1.GetVolume() << endl;
return 0;
}