C++中的Point类与vector类的简单处理
程序员文章站
2022-12-21 21:35:08
首先设计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