news 2026/4/16 12:02:07

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/4/12 6:52:29

基于SpringBoot + Vue的校园竞赛管理系统的设计与实现

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

作者头像 李华
网站建设 2026/4/16 11:12:45

基于Uniapp + SpringBoot + Vue的家教管理系统的设计与实现

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

作者头像 李华
网站建设 2026/4/11 2:25:06

Foremost Windows版终极使用指南:快速恢复隐藏文件的完整教程

Foremost Windows版终极使用指南&#xff1a;快速恢复隐藏文件的完整教程 【免费下载链接】ForemostMasterWindows版 foremost-master-windows版 是一个CTF&#xff08;Capture The Flag&#xff09;竞赛中常用的工具&#xff0c;原为Kali Linux系统自带的工具之一。本仓库提供…

作者头像 李华
网站建设 2026/4/16 11:00:59

Langchain-Chatchat教育场景应用:为学校定制智能答疑机器人

Langchain-Chatchat教育场景应用&#xff1a;为学校定制智能答疑机器人 在一所普通高校的开学季&#xff0c;新生们挤在教务处门口排队咨询&#xff1a;“宿舍几点熄灯&#xff1f;”“选课系统怎么进&#xff1f;”“助学金什么时候申请&#xff1f;”而另一边&#xff0c;辅导…

作者头像 李华
网站建设 2026/4/7 19:55:16

听说小米搞的MiMo模型很厉害的样子, 实测一下!

其实吧, 从前天开始就已经开始在WEB端开始尝试了. 但作为程序员, 必须通过API玩一玩, 毕竟直接调用API是最能直观感受一个模型的途径. 他省去了一些外部影响. 集成 昨天集成了它的API到我的网站和APP上, 大概长这样: 可以看到, 它在读取图片时, 经过了一个Image Viewer的…

作者头像 李华
网站建设 2026/4/8 19:32:30

救命!25 岁转行自学网安?一般人真扛不住,但这波我赚麻了

前言 二十五岁转行搞安全的。说实在&#xff0c;谁还没点现实考量&#xff1f;网络安全这行&#xff0c;确实有**“钱景”**。 转行干这个理由不复杂&#xff1a;新兴刚需、缺口巨大、不愁饭碗。看看新闻&#xff0c;哪个月没爆几条数据泄露、勒索攻击&#xff1f;哪个大厂小…

作者头像 李华