news 2026/7/17 16:15:26

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/7/18 8:48:12

基于SpringBoot + Vue的的企业客服管理系统的设计与实现

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

作者头像 李华
网站建设 2026/7/17 14:20:17

基于Uniapp + SpringBoot + Vue的大学生体质测试管理系统

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

作者头像 李华
网站建设 2026/7/17 3:57:17

VoxelNeXt:基于完全稀疏卷积的端到端3D目标检测算法深度解析

VoxelNeXt&#xff1a;基于完全稀疏卷积的端到端3D目标检测算法深度解析 【免费下载链接】OpenPCDet 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPCDet VoxelNeXt是OpenPCDet框架中一种创新的完全稀疏3D目标检测方法&#xff0c;通过直接在稀疏体素特征上进行预…

作者头像 李华
网站建设 2026/7/17 16:03:04

终极指南:快速上手TorchSharp深度学习库

终极指南&#xff1a;快速上手TorchSharp深度学习库 【免费下载链接】TorchSharp A .NET library that provides access to the library that powers PyTorch. 项目地址: https://gitcode.com/gh_mirrors/to/TorchSharp 想要在.NET环境中体验PyTorch的强大功能吗&#x…

作者头像 李华
网站建设 2026/7/17 10:54:57

35、Windows Server 2012 R2 网络打印机与打印服务管理指南

Windows Server 2012 R2 网络打印机与打印服务管理指南 在企业网络环境中,高效管理打印机和打印服务对于提升工作效率至关重要。本文将详细介绍 Windows Server 2012 R2 系统下网络打印机和打印服务的管理方法,包括组策略影响、打印服务器配置、文件和打印机共享设置、打印管…

作者头像 李华
网站建设 2026/7/18 0:42:00

37、网络打印机和打印服务管理全攻略

网络打印机和打印服务管理全攻略 在网络环境中,打印机和打印服务的管理至关重要。它不仅影响着工作效率,还关系到资源的合理利用。下面将详细介绍网络打印机和打印服务管理的各个方面,包括驱动安装与更新、打印机迁移、监控、问题解决以及各种属性配置等内容。 驱动安装与…

作者头像 李华