2020 我的C++学习之路 C++PrimerPlus第十一章课后习题

这篇博客记录了作者基于C++ Primer Plus的学习过程,特别是第十一章的课后习题。作者通过归纳知识点来加强理解和记忆,并使用DEV C++进行编译验证。部分内容因机械性重复而省略。
摘要由CSDN通过智能技术生成

以C++ Primer Plus为参考书籍,自身归纳知识点,加深记忆。仅供参考,DEV C++已通过编译运行
。第5题第6题改写过于麻烦,机械性重复就不写了,写的犯恶心。
练习1

//p1.h
#include<iostream>
namespace VECTOR
{
   
	class Vector
	{
   
	public:
		enum Mode {
    RECT, POL };
	private:
		double x;
		double y;
		double mag;
		double ang;
		Mode mode;
		void set_mag();
		void set_ang();
		void set_x();
		void set_y();
	public:
		Vector();
		Vector(double n1, double n2, Mode form = RECT);
		void reset(double n1, double n2, Mode form = RECT);
		~Vector();
		double xval()const {
    return x; }
		double yval()const {
    return y; }
		double magval()const {
    return mag; }
		double angval()const {
    return ang; }
		void polar_mode();
		void rect_mode();
		Vector operator+(const Vector& b)const;
		Vector operator-(const Vector& b)const;
		Vector operator-()const;
		Vector operator*(double n)const;
		friend Vector operator*(double n, const Vector& a);
		friend std::ostream& operator<<(std::ostream& os, const Vector& v);
		friend std::ofstream& operator<<(std::ofstream& ofs, const Vector& v);
	};
}

//p1.cpp
#include<cmath>
#include<fstream>//这个头得加上
#include"p1.h"
using std::sqrt;
using std::sin;
using std::cos;
using std::atan;
using std::atan2;
using std::cout;

namespace VECTOR
{
   
	const double Rad_to_deg = 45.0 / atan(1.0);

	void Vector::set_mag()
	{
   
		mag = sqrt(x * x + y * y);
	}

	void Vector::set_ang()
	{
   
		if (x == 0.0 && y == 0.0)
			ang = 0.0;
		else
			ang = atan2(y, x);
	}

	void Vector::set_x()
	{
   
		x = mag * cos(ang);
	}

	void Vector::set_y()
	{
   
		y = mag * sin(ang);
	}

	Vector::Vector()
	{
   
		x = y = mag = ang = 0.0;
		mode = RECT;
	}

	Vector::Vector(double n1, double n2, Mode form)
	{
   
		mode = form;
		if (mode == RECT)
		{
   
			x = n1;
			y = n2;
			set_mag();
			set_ang();
		}
		else if (mode == POL)
		{
   
			mag = n1;
			ang = n2;
			set_x();
			set_y();
		}
		else
		{
   
			cout << "Incorrect 3rd arguement to Vector() --";
			cout << "vector set to 0\n";
			x = y = mag = ang = 0;
			mode = RECT;
		}
	}

	void Vector::reset(double n1, double n2, Mode form)
	{
   
		mode = form;
		if (mode == RECT)
		{
   
			x = n1;
			y = n2;
			set_mag();
			set_ang();
		}
		else if (mode == POL)
		{
   
			mag = n1;
			ang = n2;
			set_x();
			set_y();
		}
		else
		{
   
			cout << "Incorrect 3rd arguement to Vector() --";
			cout << "vector set to 0\n";
			x = y = mag = ang = 0;
			mode = RECT;
		}
	}

	Vector::~Vector()
	{
   }

	void Vector::polar_mode()
	{
   
		mode = POL;
	}

	void Vector::rect_mode()
	{
   
		mode = RECT;
	}

	Vector Vector::operator+(const Vector& b)const
	{
   
		return Vector(x + b.x, y + b.y);
	}

	Vector Vector::operator-(const Vector& b)const
	{
   
		return Vector(x - b.x, y - b.y);
	}

	Vector Vector::operator-()const
	{
   
		return Vector(-x, -y);
	}

	Vector Vector::operator*(double n)const
	{
   
		return Vector(n * x, n * y);
	}

	Vector operator*(double n, const Vector& a)
	{
   
		r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值