C++ operator关键字浅析

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator和运算符整体上视为一个函数名。
使用操作符重载的意义:
比较基本类型我们可以使用"==",">=","<="等方式判断大小,是否相等等等,但是如果用户想要比较自己定义的类就需要重载操作符(修改原有操作符,自定义一个操作符,所以称之为重载)
以下操作符不可重载:
· 成员选择符
·* 成员对象选择符
:: 作用域解析操作符
?: 条件操作符
sizeof
除了赋值符号外,基类中被重载的操作符都将被派生类继承。

1.重载操作符

在日常编码中operator关键字最常见的使用方式就是用它来重载操作符下面直接上例子:

class persion
{
public:
    int age;
    bool sex;
    persion(int a,bool s):age(a),sex(s){}
    bool operator==(persion &p1)
    {
        if(p1.age==age)
            return true;
        return false;
    }
};
int main(int argc, char *argv[])
{
    persion a(1,true);
    persion b(1,false);
    if(a==b)
    {
        printf("***********\n");
    }else
    {
        printf("___________\n");
    }
}

上面代码输出为***********,可以看出类的==被我们重载了之比较age成员相等即可。在现实写代码也常常会遇到类似问题,比如我们对这个类排序(或者说比较)之比较其中一个成员的大小就行,那么我们就可以通过重载操作符实现该功能。

2.操作隐式转换

下面代码只是简单的说明了operator可以重载隐式转换并没有实现什么具体内容

class persion
{
public:
    explicit persion(int a):a(a)
    {
        printf("*************\n");
    }
    operator int()
    {
        printf("int\n");
    }
    operator float()
    {
        printf("float\n");
    }
    int a;
};
int main(int argc, char *argv[])
{
    persion a(1);
    int b=a;
    float c =a;
}

输出为:


int
float
由上面输出可以看出在执行int b=a;时将对象a强转成了int执行了operator int();执行 float c =a;时将对象a强转成了float执行了operator float()。不止可以对基本类型进行强制转换对类也可以进行强转。要活学活用。

3.函数对象

当有类使用operator重载()运算符时,调用该类的对象操作类似操作普通函数,因此取名函数对象。下面直接上代码:

class ClassA
{
public:
    ClassA()
    {
        a=0;
        qDebug()<<"ClassA"<<a;
    }
    int operator()(int a)
    {
        this->a=a;
        qDebug()<<"operator"<<this->a;
        return this->a;
    }
private:

    int a;

};
int main(int argc, char *argv[])
{
    ClassA a;
    ClassA *b=new ClassA();
    qDebug()<<a(10);
    qDebug()<<(*b)(20);
}
输出:
ClassA 0
ClassA 0
operator 10
10
operator 20
20

调用对象a(10)特别像调用一个函数,函数对象可以设置参数和返回值,如果对象是指针也可以使用

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值