15.自定义类VECTOR与操作符重载
 #ifndef __Vector_h
 #define __Vector_h
 #include "iostream"
 class Vector
 {
    private:
     int x;
     int y;
    public:
     Vector(int x_,int y_);
     ~Vector();
     Vector operator+(const Vector & vc)const;
     Vector operator-(const Vector & vc)const;
     void show(void)const;

 };
 void Vector::show(void)const
 {
    std::cout<<"This Vector is:("<<x<<","<<y<<")\n";
 }

 Vector::Vector(int x_,int y_)
 {
    x=x_;
    y=y_;
    std::cout<<"Create Vector!:("<<x<<","<<y<<")"<<std::endl;
 }
 Vector::~Vector()
 {
    std::cout<<"bye~\n";
 }
 Vector Vector::operator+(const Vector & vc)const
 {
    Vector tem;
    tem.x=x+vc.x;
    tem.y=y+vc.y;
    return tem;
 }
 Vector Vector::operator-(const Vector & vc)const
 {
    Vector tem;
    tem.x=x-vc.x;
    tem.y=y-vc.y;
    return tem; 
 }






 #endif

使用VECTOR类

 #include "iostream"
 #include "Vector.h"
 #include "Vector.cpp"
 Vector operator*(double n,Vector &a)  //无法直接访问Vector的私有数据,解决方法定义成友元 
 {
    Vector tem;

     /*tem.x=a.x*n;
    tem.y=a.y*n;
    return tem;
    */
     tem=a*n;
     return tem;
 }

// void operator<<(std::ostream & os,Vector &a)
// {
//  os<<"Vector (x,y): "<<"("<<a.x<<","<<a.y<<")\n";
// }
 std::ostream & operator<<(std::ostream & os,Vector &a)
 {
    os<<"Vector (x,y): "<<"("<<a.x<<","<<a.y<<")\n";
    return os;
 }
 int main(void)//类和普通类型可以实现强制和自动类型转换
 //普通类型 -- 类,构造函数转换; 类--普通类型,转换函数 
 {
    Vector a=Vector(5,-3),b=Vector(1,3);
    a=b+a+a;//== a=b.operate(a.operate(a));
    std::cout<<a<<b;
    a=a*1;
    a=1*b;//a==operate*(double 1,Vector b);这是一个外部函数 ,解决方法非成员函数 
    //这里有二义性,可能== a=operator+(double 1,vector b)也可能是 a=dobule 1+ operator doble(b);
     //解决方法  c++11 explicit限定符,或者外部友元函数解决 使用完全匹配的方法 
    double c;
    c=(double)a;
    std::cout<<a;
    std::cout<<c;
 }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangran1996/article/details/68950165
个人分类: C/C++
博主设置当前文章不允许评论。

没有更多推荐了,返回首页

不良信息举报

15.自定义类VECTOR与操作符重载

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭