C++重载运算符(4)

重载赋值运算符

赋值运算符重载用于对象数据的复制
operator=必须重载为成员函数
重载函数原型为:类名 & 类名 :: operator=(const 类名 & );

定义name类的重载赋值运算符函数

#include <iostream>
#include <cstring>
using namespace std;
class name{
    public:
    name(char *pn);
    name(const name & obj);//复制构造函数
    name& operator = (const name & obj);//重载赋值运算符
    ~name();
    protected:
    char *pname;
    int size;};
name::name(char *pn){
    cout<<" Constructing "<<pn<<endl;
    pname=new char[strlen(pn)+1];
    if(pname!=0) strcpy(pname,pn);
    size=strlen(pn);}
name::name(const name & obj){
    cout<<" Copying "<<obj.pname<<" into its own block\n";
    pname=new char[strlen(obj.pname)+1];
    if(pname!=0) strcpy(pname,obj.pname);
    size=obj.size;}
name & name::operator = (const name & obj){
    if(this==&obj) return *this; //避免自赋值
    delete []pname;
    pname=new char[strlen(obj.pname)+1];
    if(pname!=0) strcpy(pname,obj.pname);
    size=obj.size;
    return *this;}
name::~name(){
    cout<<" Destructing "<<pname<<endl;
    delete []pname;
    size=0;}
int main()
{
    name obj1("ZhangSan");
    name obj0=obj1;//初始化对象调用复制构造函数
    name obj2("LiSi");
    name obj3("NoName");
    name obj4("helloName");
    obj4=obj3=obj2=obj1;//修改对象时调用重载赋值运算符
    return 0;
}

在这里插入图片描述

重载运算符[ ]和( )

下标运算符[ ]和函数调用符( )是二元运算符,只能用成员函数重载,不能用友元函数。
1、由于数组中并没有保存其大小,因此不能对数值元素进行存取范围的检查,无法保证给数组动态赋值不会越界。利用C++的类可以定义一种更安全、功能强的数组类型。为此,为该类定义重载运算符[ ]。
在重载下标运算符函数是应注意:
(1)该函数只能带一参数,不可带多个参数。
(2)不得重载为友元函数,必须是非static的成员函数。
[ ]运算符用于访问数据对象的元素
重载格式:
返回值类型 类:: operator [ ] (类型)
解释为:x.opereator [ ] (y)

#include <iostream>
using namespace std;
class vector{
    public:
    vector(int n){
        v=new int[n];
        size=n;}
    ~vector(){
        delete []v;
        size=0;}
    int & operator [](int i){
        if(i>=0&&i<size)
        return v[i];}//当重载运算符函数调用需要做左值时,应该返回引用
    private:
    int *v;
    int size;};
int main()
{
    vector a(5);
    a[2]=12;
    cout<<"vector(2) "<<a[2]<<endl;
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值