【学习笔记】c++ 类 重载运算符

1 篇文章 0 订阅
1 篇文章 0 订阅

最近学校C++学到了类,要求自己实现一个向量类,做了一部分典型的重载运算符,以作笔记。

本类Vector对应的是一个向量,通过一个长度为n的数组(为了简化而取int)对应n维向量。

class Vector{//首先是类申明,用的构造函数是默认构造函数,实在是懒得写了
public:
    void Input(int *A,int n1); //输入部分,要求输入目标向量的数组名和实际需要的长度
    ~Vector();//析构函数
    void Vecnew(int nk); //申请动态数组
    void Print();//输出函数
    void operator=(const Vector &v);//重载等号
    void Vector::operator+=(int j)const;//重载+=
    friend Vector Vector::operator+(Vector &v,Vector &u);//重载w=v+u类型,w,v,u向量类
private:
    int *k; //数组指针
    int n; //长度、维数
};
  • 准备工作:
void Vector::Input(int *A,int n1){
    n=n1;
    Vecnew(n1);//申请动态数组
    int i;
    for(i=0;i<n1;i++){
        k[i]=A[i];
    }
}//录入完毕
void Vector::Vecnew(int nk){
    k=new int[nk];//根据输入的长度申请动态空间
    k[nk]='\0';//防止溢出
}
  • 只做了三种重载,分别是:
    1.=,其他重载的基础
    2.+=,仅需要对一个常数进行支持,和++这类单目运算符类似
    3.w=v+u,需要对另两个类进行支持,需要用到友元函数
    其他的运算符无非也就止于这三类,不急于一次性完成所有的重载

第一类:=

void Vector::operator=(const Vector &v){  //申明重载,右侧类记作v,左侧为w
    n=v.n;//类w的初始化
    Vecnew(n);//同上
    int i;
    for(i=0;i<n;i++){
        k[i]=v.k[i];
    }//复制完毕
}

第二类:+=

void Vector::operator+=(int j)const{ //参照第一类
    int i;
    for(i=0;i<n;i++){
        k[i]+=j;
    }
}

第三类:w=v+u

friend Vector:: Vector operator+(Vector &v,Vector &u){//申明重载并使用友元函数
    Vector w;//临时存放的目标类
    w.n=v.n;
    w.Vecnew(w.n);
    int i;
    for(i=0;i<w.n;i++){
        w.k[i]=v.k[i]+u.k[i];
    }
    return w;//返回类到等号右侧
}
  • 析构函数
~Vector(){
    k[0]='\0';//防止溢出
    delete k;//删除动态空间
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值