C++面向对象程序设计2
用类成员结构修改《c++面向对象程序设计1》的程序,使其实现相同的功能。
定义Point类和Line类,表示点和线;
定义SetPoint类,包含两个Line类成员和一个表示直线交点的Point成员,
并定义类中求直线交点的成员函数。
编写每个类相应的成员函数和测试用的主函数。
代码如下:(仅供个人学习使用)
/*———————————————————————————————————————————————————
p242 5. 定义Point类 Line类 SetPoint类 实现4.
2017年4月22日21:42:40
—————————————————————————————————————————————————————*/
#include
using namespace std;
class Point //定义Point类
{
friend class SetPoint; //友元类声明
friend class Line;
public:
private:
double x;
double y;
};
class Line //定义Line类
{
friend class SetPoint; //友元类声明
public:
Line(){}
Line(double a1,double b1):a(a1),b(b1){} //重载构造函数
void Print(); //打印函数方程
~Line(){}
private:
double a;
double b;
};
void Line::Print()
{
cout << "直线方程:" << endl;
if (this->a == 1) //a==1 输出x=1*x
{
cout << "y=x+" << this->b << endl;
}
else
{
cout << "y=" << this->a << "x+" << this->b << endl;
}
}
class SetPoint //定义SetPoint类
{
public:
SetPoint(){}
void SetLine(double a1, double b1,double a2,double b2); //设置成员变量的值
void PrintFc(); //打印两函数方程
void GetPoint(); //求两函数图像交点
~SetPoint(){}
private:
Line L1;
Line L2;
Point p;
};
void SetPoint::SetLine(double a1,double b1,double a2,double b2)
{
L1.a = a1;
L1.b = b1;
L2.a = a2;
L2.b = b2;
}
void SetPoint::PrintFc()
{
L1.Print();
L2.Print();
}
void SetPoint::GetPoint()
{
if (L1.a == L2.a && L1.b == L2.b)
{
cout << "两直线重合了,有无数交点。。。" << endl;
}
else if (L1.a == L2.a && L1.b != L2.b)
{
cout << "两直线平行,无交点。。" << endl;
}
else //两直线不平行不重合应用克拉默法则求解交点
{
p.x = (((-L1.b) * (-1)) - ((-1) * (-L2.b))) / ((L1.a * (-1)) - ((-1) * L2.a));
p.y = ((L1.a * (-L2.b)) - ((-L1.b )* L2.a)) / ((L1.a * (-1)) - ((-1) * L2.a));
cout << "两直线交点:";
cout << '(' << p.x << ',' << p.y << ')' << endl;
}
}
int main()
{
SetPoint obj;
int a1, b1, a2, b2; //定义两函数方程系数
cout << "请输入两直线系数a b(y=ax+b)" << endl;
cin >> a1 >> b1 >> a2 >> b2;
obj.SetLine(a1, b1, a2, b2);
obj.PrintFc(); //打印两函数方程
obj.GetPoint(); //打印两方程交点
system("pause"); //暂停
return 0;
}