//一个矩形类,一个圆形类
//每个类能独自输出自己的周长,面积和位置
//一个场景类包括两个矩形和两个圆形
//场景类中能够控制任意一个图形的放大和缩小和平移
//并能够输出变化后每个图形的周长,面积和位置
#include "stdio.h"
#include"iostream"
#define PI 3.14
using namespace std;
class Yuan_kzx;
class Point_kzx
{
friend class Yuan_kzx;
public:
int x, y;
Point_kzx() :x(0), y(0) { };
Point_kzx(int a, int b) :x(a), y(b) {};
Point_kzx(Point_kzx & p);
void Yuanweizhi(Point_kzx a);
};
Point_kzx::Point_kzx(Point_kzx& p) :x(p.x + 10), y(p.y + 10) {};
class Changjing_kzx;
class Yuan_kzx
{
public:
friend class Changjing_kzx;
Point_kzx yx;
int r;
Yuan_kzx() { r = 3; };
Yuan_kzx(Point_kzx c, int d) :yx(c), r(d) {};
Yuan_kzx(Yuan_kzx & a);
void Yuanzhouchang(Yuan_kzx a);
void Yuanmianji(Yuan_kzx a);
void Yuanweizhi(Yuan_kzx a);
};
void Yuan_kzx::Yuanzhouchang(Yuan_kzx a)
{
float zc;
zc = 2 * PI *a. r;
cout << "圆形周长:" << zc << endl;
}
void Yuan_kzx::Yuanmianji(Yuan_kzx a)
{
float mj;
mj = PI *a. r * a.r;
cout << "圆形面积:" << mj << endl;
}
void Yuan_kzx::Yuanweizhi(Yuan_kzx a)
{
cout << "圆心位置" << a.yx.x << "," << a.yx.y << endl;
cout << "半径为:" <<a. r << endl;
}
class Rec_kzx
{
friend class Changjing_kzx;
public:
Point_kzx a1, a2, a3, a4;
Rec_kzx() {};
Rec_kzx(Point_kzx a, Point_kzx b, Point_kzx c, Point_kzx d) :a1(a), a2(b), a3(c), a4(d) {};
Rec_kzx(Rec_kzx &R);
void Reczhouchang(Rec_kzx q);
void Recmianji(Rec_kzx q);
void Recweizhi(Rec_kzx q);
};
void Rec_kzx::Reczhouchang(Rec_kzx q)
{
int zc;
zc = q.a1.y - q.a3.y + q.a2.y - q.a4.y + q.a2.x - q.a1.x + q.a4.x - q.a3.x;
cout << "矩形周长为:" << zc << endl;
}
void Rec_kzx::Recmianji(Rec_kzx q)
{
int mj;
mj = (q.a1.y - q.a3.y) * (q.a2.x - q.a1.x);
cout << "矩形面积为" << mj << endl;
}
void Rec_kzx::Recweizhi(Rec_kzx q)
{
cout << "矩形位置" << "(" << q.a1.x << "," << q.a1.y << ")" << "(" << q.a2.x << "," << q.a2.y << ")" << "(" << q.a3.x << "," << q.a3.y << ")" << "(" << q.a4.x << "," << q.a4.y << ")" << endl;
}
class Changjing_kzx
{
public:
Yuan_kzx a, b;
Rec_kzx c, d;
void fdsxjuxing(Rec_kzx c);
void fdsxyuanxing(Yuan_kzx a);
void pyjuxing(Rec_kzx c);
void pyyuanxing(Yuan_kzx b);
};
void Changjing_kzx::fdsxjuxing(Rec_kzx c)
{
cout << "输入f放大,s缩小" << endl;
char a;
cin >> a;
if (a == 'f')
{
c.a1.x--;
c.a1.y++;
c.a2.x++;
c.a2.y++;
c.a3.x--;
c.a3.y--;
c.a4.x++;
c.a4.y--;
}
else if (a == 's')
{
c.a1.x++;
c.a1.y--;
c.a2.x--;
c.a2.y--;
c.a3.x++;
c.a3.y++;
c.a4.x--;
c.a4.y++;
}
else
{
cout << "输入错误";
}
}
void Changjing_kzx::fdsxyuanxing(Yuan_kzx b)
{
cout << "输入f放大,s缩小" << endl;
char a;
cin >> a;
if (a == 'f')
{
b.r++;
}
else if (a == 's')
{
b.r--;
}
else
{
cout << "输入错误";
}
}
void Changjing_kzx::pyjuxing(Rec_kzx c)
{
cout << "输入a向左,d向右" << endl;
char a;
cin >> a;
if (a == 'a')
{
c.a1.x--;
c.a2.x--;
c.a3.x--;
c.a4.x--;
}
else if (a == 'd')
{
c.a1.x++;
c.a2.x++;
c.a3.x++;
c.a4.x++;
}
else
{
cout << "输入错误";
}
}
void Changjing_kzx ::pyyuanxing (Yuan_kzx b)
{
cout << "输入a向左,d向右" << endl;
char a;
cin >> a;
if (a == 'a')
{
b.yx.x--;
}
else if (a == 'd')
{
b.yx.x++;
}
else
{
cout << "输入错误";
}
}
int main()
{
Point_kzx y1(0, 0), j1(4, 5), j2(7, 5), j3(4, 0), j4(7, 0);
Yuan_kzx c1(y1, 3), c2(c1);
Rec_kzx r1(j1, j2, j3, j4), r2(r1);
r2.Recmianji(r2);
r2.Recweizhi(r2);
r2.Reczhouchang(r2);
}
看到无法解析的外部符号 就是说 编译器没找到这个函数的实现
class. Yuan_kzx. 有一个构造函数没有实现