首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等。

向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0);

第14行:由于Vector需要用到Point中的x,y ,故设计为友元较为方便;

第13行:因为无法修改ostream与istream类,所以将"<<" ">>"重载为全局函数或者申明为友元;返回os能够实现"<<"  ">>"的连续使用;

第49行:设计第二个构造函数,以便实现Vector中运算符重载时的返回值的情况;

第59行:防止自复制;

 #include<iostream>
using namespace std; class Point // Point类
{
private :
double x,y;
public :
Point(double x1=,double y1=):x(x1),y(y1) {} // Point构造函数
Point(const Point &rhs); // Point复制构造函数
Point operator + (const Point & a); // Point +
Point operator - (const Point & a); // Point -
friend ostream & operator << (ostream & os , const Point & a); // Point输出重载
friend class Vector; // 友元
}; Point::Point(const Point & rhs) // Point复制构造函数
{
if(this != &rhs)
{
x = rhs.x;
y = rhs.y;
}
} Point Point::operator + (const Point & a) // Point +
{
return Point(x + a.x , y + a.y);
} Point Point::operator - (const Point & a) // Point -
{
return Point(x - a.x , y - a.y);
} ostream & operator << (ostream & os , const Point & a) // Point <<
{
os <<a.x<<","<<a.y;
return os;
} class Vector // Vector 类
{
private :
Point beg,end,_00;
public :
Vector(double x1=,double y1=,double x2=,double y2=) // 构造函数1
:beg(x1,y1),end(x2,y2) {}
Vector(Point beg1,Point end1):beg(beg1),end(end1) {} // 构造函数2(重载)
Vector(const Vector & b); // 复制构造函数
Vector operator + (const Vector & b); // Vector +
Vector operator - (const Vector & b); // Vector -
friend ostream & operator << (ostream & os , const Vector & b); // Vector 输出重载 <<
// void print(); // 输出函数
}; Vector::Vector(const Vector & rhs1) // 复制构造函数
{
if(this != &rhs1)
{
beg = rhs1.beg;
end = rhs1.end;
}
} Vector Vector::operator + (const Vector & b) // Vector +
{
return Vector(_00 , end -beg + b.end - b.beg); // 利用构造函数重载构造
} Vector Vector::operator - (const Vector & b) // Vector -
{
return Vector(_00 , end - beg - b.end + b.beg);
}
/*
void Vector::print() // 输出函数
{
cout <<"("<<beg.x<<","<<beg.y<<")"<<"\t";
cout <<"("<<end.x<<","<<end.y<<")"<<endl<<endl;
}
*/ ostream & operator << (ostream & os , const Vector & b)
{
os <<"("<<b.beg<<")"<<"\t";
os <<"("<<b.end<<")"<<endl<<endl;
return os;
} int main()
{
Vector ww(,,,),mm(,,,);
// ww.print();
// mm.print();
// (ww+mm).print();
// (ww-mm).print();
cout<<ww<<mm<<ww-mm<<mm+ww;
return ;
}

2019-10-17

C++中的Point类与vector类的简单处理的更多相关文章

  1. 【java】学习路径25-ArrayList类,Vector类,LinkedList类的使用和区别,Iterator迭代器的使用

    ArrayList的使用 ArrayList类:可变化长度的数组. 与一般的数组不同的是,其长度不固定,可以添加任意类型的数据. 也可以添加不同类型的数据,但是一般不这么做. ArrayList类位于 ...

  2. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

  3. java中Vector类的常用方法

    Vector类是实现List接口,所以继承的方法就不在这里讲了 https://www.cnblogs.com/xiaostudy/p/9503199.html public void add(int ...

  4. vector 类中的 push_back( ) 函数

    函数名 push_back,算法语言里面的一个函数名,如:   1) c++中的vector头文件里面就有这个push_back函数:   2) 在vector类中作用为在vector尾部加入一个数据 ...

  5. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

  6. 转载:C++ vector 类学习笔记

    声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...

  7. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...

  8. 五:Java之Vector类专题

    据说期末考试要考到Vector 这个类,出于复习须要在这里就要好好整理下这个类了. 一.基本概念 Vector 是可实现自己主动增长的对象数组. java.util.vector提供了向量类(vect ...

  9. List接口的实现类(Vector)(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)

      LinkedList提供以下方法:(ArrayList无此类方法) addFirst();    removeFirst();   addLast();   removeLast(); 在堆栈中, ...

随机推荐

  1. Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展

    列表list定义 L1 = [] L2 = [1,2,'abc'] L3 = list() L4 = list(range(5)) L5 = [1,'abc',True,None,[4,5,'abc' ...

  2. ubuntu 16.04下node和pm2安装

    一.安装node,这里安装9.0的版本,安装其它版本直接到https://deb.nodesource.com/setup_9.x找相应版本的更改既可 1.sudo apt-get remove no ...

  3. conan使用(四)--打包二进制库

    前面总结过如何打包一个存头文件库,那种情况下非常简单,因为只需要将源文件拷贝就行了.现在来研究下如何打包一个正常情况下会生成动态库或静态库的包.参考文档:https://docs.conan.io/e ...

  4. 201871010105-曹玉中《面向对象程序设计(java)》第十四周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  5. CentOS 8 正式发布!

    CentOS 8 正式发布! CentOS 8 和 RedHat Enterprise Linux 8 发行的版本是一致的,都是基于 Fedora 28 和 内核 4.18.支持传统的.新兴的工作负载 ...

  6. 洛谷 SP9722 CODESPTB - Insertion Sort

    洛谷 SP9722 CODESPTB - Insertion Sort 洛谷传送门 题目描述 Insertion Sort is a classical sorting technique. One ...

  7. 论文阅读笔记六十六:Wide Activation for Efficient and Accurate Image Super-Resolution(CVPR2018)

    论文原址:https://arxiv.org/abs/1808.08718 代码:https://github.com/JiahuiYu/wdsr_ntire2018 摘要 本文证明在SISR中在Re ...

  8. 11/6 <bit manipulation>

    389. Find the Difference ^ (按位异或): 参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0. 抵消掉相同的位,剩下的就是多余的位. class ...

  9. 【51Nod 1769】Clarke and math2

    [51Nod 1769]Clarke and math2 题面 51Nod 题解 对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\). 其实题目就是要求\( ...

  10. CPU、内存、磁盘的瓶颈(转载文)

    1.如何判断CPU.内存.磁盘的瓶颈? CPU瓶颈1) 查看CPU利用率.建议CPU指标如下 a) User Time:65%-70% b) System Time:30%-35% c) Idle:0 ...