目录

  • 概述
  • 实现
    • `Vec2D.h`
    • `Vec2D.cpp`
  • 测试
    • `Main.cpp`
    • 运行情况

概述

设计一个类,实现对二维向量的存储及实现。其类中存储了向量的坐标,以及一些常见的操作。

实现

  • Vec2D.h

#pragma once
#include <bits/stdc++.h>using namespace std;class Vec2D
{double x_;double y_;
public://无参构造函数Vec2D();//用向量坐标初始化对象Vec2D(double, double);//析构函数~Vec2D();//将向量转换为坐标形式的字符串std::string toString();//求两个向量的加法Vec2D add(const Vec2D& vec);//求向量与一个数的加法Vec2D add(double num);//求两个向量的减法Vec2D sub(const Vec2D& vec);//求向量与一个数的减法Vec2D sub(double num);//求两个向量的数量积double dot(const Vec2D& vec);//求向量数乘Vec2D mul(double num);//求向量的相反向量Vec2D neg();//向量自增1Vec2D& inc();//向量自减1Vec2D& dec();//求向量的模double len();//返回向量的横坐标double getX();//返回向量的纵坐标double getY();//比较两个向量的大小int comp(Vec2D& vec);//对向量的模重载<运算符bool operator<(Vec2D& vec);//求相反向量,重载-运算符Vec2D operator-();//自增/自减重载Vec2D& operator++();Vec2D& operator--();//输入输出流重载friend ostream& operator<<(ostream& os, Vec2D vec);friend istream& operator>>(istream& is, Vec2D& vec);operator double();
};
  • Vec2D.cpp

#include "Vec2D.h"Vec2D::Vec2D()
{x_ = 0.0;y_ = 0.0;
}Vec2D::Vec2D(double x, double y)
{x_ = x;y_ = y;
}Vec2D::~Vec2D()
{}std::string Vec2D::toString()
{return std::string('(' + std::to_string(x_) + ',' + std::to_string(y_) + ')');
}Vec2D Vec2D::add(const Vec2D& vec)
{return Vec2D(x_ + vec.x_, y_ + vec.y_);
}Vec2D Vec2D::add(double num)
{return Vec2D(x_ + num, y_ + num);
}Vec2D Vec2D::sub(const Vec2D& vec)
{return Vec2D(x_ - vec.x_, y_ - vec.y_);
}Vec2D Vec2D::sub(double num)
{return Vec2D(x_ - num, y_ - num);
}double Vec2D::dot(const Vec2D& vec)
{return x_ * vec.x_ + y_ * vec.y_;
}Vec2D Vec2D::mul(double num)
{return Vec2D(x_ * num, y_ * num);
}Vec2D Vec2D::neg()
{return Vec2D(-x_, -y_);
}Vec2D& Vec2D::inc()
{x_++;y_++;return *this;
}Vec2D& Vec2D::dec()
{x_--;y_--;return *this;
}double Vec2D::len()
{return sqrt(x_ * x_ + y_ * y_);
}double Vec2D::getX()
{return x_;
}double Vec2D::getY()
{return y_;
}int Vec2D::comp(Vec2D& vec)
{double l1 = this->len();double l2 = vec.len();if (abs(l1 - l2) < 1e-10)return 0;elsereturn l1 > l2 ? 1 : -1;return 0;
}bool Vec2D::operator<(Vec2D& vec)
{return this->comp(vec) < 0;
}Vec2D Vec2D::operator-()
{return Vec2D(-x_, -y_);
}Vec2D& Vec2D::operator++()
{x_ += 1;y_ += 1;return *this;
}Vec2D& Vec2D::operator--()
{x_ -= 1;y_ -= 1;return *this;
}Vec2D::operator double()
{return len();
}ostream& operator<<(ostream& os, Vec2D vec)
{os << vec.toString();return os;
}istream& operator>>(istream& is, Vec2D& vec)
{is >> vec.x_ >> vec.y_;return is;
}

测试

  • Main.cpp

#include <bits/stdc++.h>
#include "Vec2D.h"using namespace std;int main()
{Vec2D v1{ 3,4 }, v2{ 6,8 }, v3{};cout << "v1=" << v1.toString() << endl;cout << "v2=" << v2 << endl;cout << "v1.len=" << v1.len() << endl;cout << "v2.len=" << v2.len() << endl;cout << "v1+v2=" << v1.add(v2).toString() << endl;cout << "v1-v2=" << v1.sub(v2).toString() << endl;cout << "v1·v2=" << v1.dot(v2) << endl;cout << "v1+1=" << v1.add(1).toString() << endl;cout << "v2-2=" << v2.sub(2).toString() << endl;cout << "v1 vs v2=" << v1.comp(v2) << endl;cout << "v1.neg=" << v1.neg().toString() << endl;cout << "-v1=" << (-v1).toString() << endl;cout << "v1*3=" << v1.mul(3).toString() << endl;cout << "v1.inc=" << v1.inc().toString() << endl;cout << "++v1=" << (++v1).toString() << endl;cout << "v2.dec=" << v2.dec().toString() << endl;cout << "--v2=" << (--v2).toString() << endl;if (v1 < v2)cout << "v1<v2" << endl;elsecout << "v1>=v2" << endl;cout << "Input (x,y): ";cin >> v3;cout << v3 << endl;double lv1=v1;cout << "double v1=" << lv1;return 0;
}
  • 运行情况

v1=(3.000000,4.000000)
v2=(6.000000,8.000000)
v1.len=5
v2.len=10
v1+v2=(9.000000,12.000000)
v1-v2=(-3.000000,-4.000000)
v1·v2=50
v1+1=(4.000000,5.000000)
v2-2=(4.000000,6.000000)
v1 vs v2=-1
v1.neg=(-3.000000,-4.000000)
-v1=(-3.000000,-4.000000)
v1*3=(9.000000,12.000000)
v1.inc=(4.000000,5.000000)
++v1=(5.000000,6.000000)
v2.dec=(5.000000,7.000000)
--v2=(4.000000,6.000000)
v1>v2
Input (x,y): 1 2
(1.000000,2.000000)
double v1=7.81025

面向对象程序设计实践(C++)——二维向量相关推荐

  1. Python 编程训练2:二维向量

    目标 定义一个 Python 类名为 V2,用于表示二维向量,支持下列向量运算: 由两个实数创建一个二维向量:如:v = V2(1.1, 2.2) 将一个向量转换为字符串形式(使用__str__方法) ...

  2. uda 3.C++二维向量

    二维向量 接下来,你将使用向量来存储矩阵.就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量.用于声明二维向量的语法有点复杂. 假设你正在使用 Python,并且想存储一个 3 ...

  3. LeetCode 251. 展开二维向量

    文章目录 1. 题目 2. 解题 1. 题目 请设计并实现一个能够展开二维向量的迭代器.该迭代器需要支持 next 和 hasNext 两种操作.. 示例: Vector2D iterator = n ...

  4. C++:二维数组和二维向量的长度

    对于一个二维数组: int mm[3][5] = { { 1,2,3,4,5 },{ 5,6,7,8,9 },{ 9,10,11,12,13 } }; int toatlnums = sizeof(m ...

  5. 用vector实现二维向量

    如果一个向量的每一个元素是一个向量,则称为二维向量,例如 [cpp] view plain copy   vector<vector<int> >vv(3, vector< ...

  6. c++中二维数组与二维向量的长度

    对于一个二维数组: int mm[3][5] = { { 1,2,3,4,5 },{ 5,6,7,8,9 },{ 9,10,11,12,13 } }; int toatlnums = sizeof(m ...

  7. 从二维向量跟虚数的区别到欧拉公式,复指数函数

    正如我们所知道的,二维向量和虚数都可以写为[a,b]这样子的形式,在平面坐标和复平面都可以都有一个点与之对 应,他们之间是一样的吗? 二维向量的两个数是完全独立变量,两者之间没有什么关系,向量的含义比 ...

  8. C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序

    C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序 实验内容:Windows 窗体程序 一.实验目的及要求 二.实验环境 三.实验内容与步骤 一.设计简单的计算器 3.1.实验内容 ...

  9. 软考中级(软件设计师)——面向对象程序设计(C++Java二选一的题15分-目标3分)

    软考中级(软件设计师)--面向对象程序设计(C++&Java二选一的题15分-目标3分) 目录 软考中级(软件设计师)--面向对象程序设计(C++&Java二选一的题15分-目标3分) ...

最新文章

  1. oracle text db2,从Oracle 到DB2(一)
  2. windows7安装django并创建第一个应用
  3. 分享一些好用的 Chrome 插件!
  4. python代码异常对照表格_Python表格py错误(pandas错误?)
  5. 小姐姐:如何参与大型开源项目-Taro 共建
  6. 如何开发 Node.js Native Add-on?
  7. php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件
  8. oracle数据设置为ull,Oracle _11g_使用手册_自备
  9. linux虚拟机模板部署模板,创建和部署基于 Linux 的虚拟机模板
  10. 引用 CSS+DIV/Ul+LI/dl+dt+dd/tabale+css 样式
  11. 相关滤波跟踪·MOSSE算法的梳理
  12. 微信中扫一扫二维码唤起手机默认浏览器的实现方式
  13. 灰色预测 Matlab
  14. 人工智能 识别医疗票据、医疗结算清单 OCR识别技术
  15. MySQL--数据模型
  16. Linux系统中OpenSSH的安装和配置(转)
  17. 常微分方程——非齐次线性微分方程与常数变易法
  18. C语言必会面试题(3、耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)...
  19. 3868mysql数据库应用0003_电大3868MySQL数据库应用-0003-参考资料
  20. ACM Digital Library访问及完整联动Zotero

热门文章

  1. 应用时间序列分析清华大学出版社电子版_数据分析模型9——预知未来的算法:时间序列分析...
  2. private static final long serialVersionUID = 1L 是什么意思
  3. Proxyee down 3 for Mac
  4. 新一代人工智能产业技术创新战略联盟和开放原子开源基金会举行战略合作签约仪式
  5. 【蓝桥杯】历届试题 数字游戏(C++)
  6. 搭建一个PHP后台的开发环境你所需要配置东西都有哪些?XAMPP问题
  7. spring项目中使用slf4j和log4j2日志框架
  8. Windows Server 2008 R2 SP1中的具体改进
  9. 创客匠人年度共创峰会圆满落幕
  10. 如何用python批量识别图片上的文字(一)