news 2026/9/23 3:00:01

6.再谈重载:一个矢量类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.再谈重载:一个矢量类

6.再谈重载:一个矢量类

位移矢量指的是从何处开始到何处结束,而不是经过的路线。

VECTOR.h

#pragma once #ifndef VECTOR_H__ #define VECTOR_H__ #include <iostream> using namespace std; namespace Vector { class VECTOR1 { public: enum Mode { RECT, POL }; private: double x; // horizontal value double y; // vertical value double mag; // length of vector double ang; // direction of vector in degrees Mode mode; // RECT or POL // private methods for setting values void set_mag(); void set_ang(); void set_x(); void set_y(); public: VECTOR1(); VECTOR1(double n1, double n2, Mode form = RECT); void reset(double n1, double n2, Mode form = RECT); double xval() const { return x; } // report x value double yval() const { return y; } // report y value double magval() const { return mag; } // report magnitude double angval() const { return ang; } // report angle void polar_mode() { mode = RECT; }; // set mode to POL void rect_mode() { mode = POL; }; // set mode to RECT ​ VECTOR1 operator+(const VECTOR1& b) const; VECTOR1 operator-(const VECTOR1& b) const; VECTOR1 operator-() const; VECTOR1 operator*(double n) const; ​ friend VECTOR1 operator*(double n, const VECTOR1& a); friend ostream& operator<<(ostream& os, const VECTOR1& v); }; }; ​ #endif ​

,

VECTOR.cpp

#include "VECTOR.h" #include <cmath> namespace Vector { ​ //double num = 180.0 / 3.14159265358979323846; const double num = 45.0 / atan(1.0); void VECTOR1::set_mag() { mag = sqrt(x * x + y * y); } ​ void VECTOR1::set_ang() { if (x == 0.0 && y == 0.0) { ang = 0.0; } else { ang = atan2(y, x); } } ​ void VECTOR1::set_x() { x = mag * cos(ang); } ​ void VECTOR1::set_y() { y = mag * sin(ang); } ​ VECTOR1::VECTOR1() { x = y = mag = ang = 0.0; mode = RECT; } ​ VECTOR1::VECTOR1(double n1, double n2, Mode form) { mode = form; if (form == RECT) { x = n1; y = n2; set_mag(); set_ang(); } else if (form == POL) { mag = n1; ang = n2 / num; set_x(); set_y(); cout << "ang=" << ang << "mag=" << mag << endl; } else { cout << "Incorrect 3rd argument to VECTOR() -- "; cout << "vector set to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } ​ void VECTOR1::reset(double n1, double n2, Mode form) { mode = form; if (form == RECT) { x = n1; y = n2; set_mag(); set_ang(); } else if (form == POL) { mag = n1; ang = n2 / num; set_x(); set_y(); } else { cout << "Incorrect 3rd argument to VECTOR() -- "; cout << "vector set to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } ​ VECTOR1 VECTOR1::operator+(const VECTOR1& b) const { VECTOR1 temp; temp.x = x + b.x; temp.y = y + b.y; temp.set_mag();//类适合在一个对象中表示实体的不同方面(直角坐标和极坐标) temp.set_ang(); return temp; }//按照这种重载方式,不仅要更新直角坐标,还要更新极坐标, //按照下面用构造函数的方式就方便的多 VECTOR1 VECTOR1::operator-(const VECTOR1& b) const { return VECTOR1(x - b.x, y - b.y); } VECTOR1 VECTOR1::operator-() const { return VECTOR1(-x, -y); } VECTOR1 VECTOR1::operator*(double n) const { return VECTOR1(n * x, n * y); } ​ VECTOR1 operator*(double n, const VECTOR1& a) { return a * n; } ​ ostream& operator<<(ostream& os, const VECTOR1& v) { if (v.mode == VECTOR1::RECT) { os << "(x,y) = (" << v.x << "," << v.y << ")"; } else if (v.mode == VECTOR1::POL) { os << "(m,a) = (" << v.mag << "," << v.ang<< ")"; //cout << "d" << v.mag << v.ang * num; } else { os << "Vector object mode is invalid"; } return os; } }

main.cpp

// VECTOR.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // ​ #include <iostream> #include "VECTOR.h" using namespace Vector; int main() { std::cout << "Hello World!\n"; VECTOR1 a = VECTOR1(3.0, 4.0, VECTOR1::POL); VECTOR1 B = VECTOR1(6.0, 4.0, VECTOR1::RECT); VECTOR1 d = VECTOR1(8.0, 6.0, VECTOR1::POL); /*VECTOR1 a = VECTOR1(3.0, 4.0, RECT);*/ cout << "a: " << a << endl; cout << "B: " << B << endl; VECTOR1 c; c = a + B; cout << "c=a+B: " << c << endl; c = a - B; cout << "c=a-B: " << c << endl; c = -d; cout << "c=-d: " << c << endl; return 0; } ​ // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 ​ // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 ​

类适合在一个对象中表示实体的不同方面

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 1:36:08

SpringBoot+Vue Spring boot社区医院管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着信息技术的快速发展和医疗行业的数字化转型&#xff0c;社区医院作为基层医疗服务的重要载体&#xff0c;亟需通过信息化手段提升管理效率和服务质量。传统的社区医院管理多依赖手工操作和纸质记录&#xff0c;存在数据易丢失、查询效率低、资源共享困难等问题。为解决…

作者头像 李华
网站建设 2026/9/22 3:25:30

基于SpringBoot + Vue的青少年心理健康平台的设计与实现

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/9/22 1:25:52

基于数据挖掘的小米手机营销数据分析与可视化

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/9/21 19:32:28

kanass全面介绍(23) - 如何将评审与企业微信通知相结合

kanass支持测试用例与需求评审&#xff0c;同时也支持将评审与企业微信通知进行关联&#xff0c;使负责人第一时间接收到通知并及时评审。1、配置企业微信通知进入系统设置->消息->发送方式页面下&#xff0c;点击企业微信后的配置字段说明名称发送方式名称&#xff0c;自…

作者头像 李华
网站建设 2026/9/22 14:45:52

Langchain-Chatchat是否支持语音输入?扩展功能开发思路分享

Langchain-Chatchat是否支持语音输入&#xff1f;扩展功能开发思路分享 在企业知识管理日益智能化的今天&#xff0c;越来越多组织开始关注如何在保障数据隐私的前提下&#xff0c;构建高效、易用的本地问答系统。像会议查询、设备操作指导这类高频场景中&#xff0c;用户往往…

作者头像 李华
网站建设 2026/9/22 7:44:19

Langchain-Chatchat等保三级要求满足情况分析:国内合规指南

Langchain-Chatchat 与等保三级合规性深度解析&#xff1a;构建安全可信的本地化AI问答系统 在金融、政务、医疗等行业&#xff0c;企业对数据安全的要求早已超越“可用即可”的初级阶段。一个典型的现实挑战是&#xff1a;如何在引入大模型智能能力的同时&#xff0c;确保员工…

作者头像 李华