欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++中的Point类与vector类的简单处理

程序员文章站 2022-05-18 20:07:34
首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等。 向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0); 第14行:由于Vector需要用到Point中的x,y ,故设计为友元较为方便; 第13行:因为无法修改ostream与istream类,所以将 ......

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

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

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

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

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

第59行:防止自复制;

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class point        // point类 
 5 {
 6     private :
 7         double x,y;
 8     public :    
 9         point(double x1=0,double y1=0):x(x1),y(y1) {}     // point构造函数 
10         point(const point &rhs);        // point复制构造函数 
11         point operator + (const point & a);        // point + 
12         point operator - (const point & a);        // point - 
13         friend ostream & operator << (ostream & os , const point & a);    // point输出重载 
14         friend class vector;    // 友元 
15 };
16 
17 point::point(const point & rhs)        // point复制构造函数
18 {
19     if(this != &rhs)
20     {
21         x = rhs.x;
22         y = rhs.y;        
23     }
24 }
25 
26 point point::operator + (const point & a)    // point + 
27 {
28     return point(x + a.x , y + a.y);
29 } 
30 
31 point point::operator - (const point & a)    // point -
32 {
33     return point(x - a.x , y - a.y);
34 }
35 
36 ostream & operator << (ostream & os , const point & a)        // point << 
37 {
38     os <<a.x<<","<<a.y;
39     return os;
40 }
41 
42 class vector     // vector 类 
43 {
44     private :
45         point beg,end,_00;
46     public :
47         vector(double x1=0,double y1=0,double x2=0,double y2=0)        // 构造函数1 
48             :beg(x1,y1),end(x2,y2) {} 
49         vector(point beg1,point end1):beg(beg1),end(end1) {}    // 构造函数2(重载)
50         vector(const vector & b);        // 复制构造函数 
51         vector operator + (const vector & b);        // vector + 
52         vector operator - (const vector & b);        // vector -
53         friend ostream & operator << (ostream & os , const vector & b);        // vector 输出重载 << 
54 //        void print();            // 输出函数          
55 };
56 
57 vector::vector(const vector & rhs1)        // 复制构造函数 
58 {
59     if(this != &rhs1)
60     {
61     beg = rhs1.beg;
62     end = rhs1.end;        
63     }
64 } 
65 
66 vector vector::operator + (const vector & b)        // vector + 
67 {
68     return vector(_00 , end  -beg + b.end - b.beg);        // 利用构造函数重载构造 
69 } 
70 
71 vector vector::operator - (const vector & b)    // vector -
72 {
73     return vector(_00 , end - beg - b.end + b.beg);
74 }
75 /*
76 void vector::print()    // 输出函数 
77 {
78     cout <<"("<<beg.x<<","<<beg.y<<")"<<"\t";
79     cout <<"("<<end.x<<","<<end.y<<")"<<endl<<endl;
80 }
81 */
82 
83 ostream & operator << (ostream & os , const vector & b)
84 {
85     os <<"("<<b.beg<<")"<<"\t";
86     os <<"("<<b.end<<")"<<endl<<endl;
87     return os;
88 }
89 
90 int main()
91 {
92     vector ww(0,0,10,10),mm(1,1,5,5);
93 //    ww.print();
94 //    mm.print();
95 //    (ww+mm).print();
96 //    (ww-mm).print();
97     cout<<ww<<mm<<ww-mm<<mm+ww;
98     return 0;
99 }

 

2019-10-17