C++面向对象程序设计2

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;
}
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值