Qt C++ 运算符重载详解

Qt C++ 运算符重载详解,第1张

为什么对运算符重载?

C++中预定义中的运算符的 *** 作对象只限于基本的内置数据类型,但对于我们自定义的类型是没办法 *** 作的,但是在实际开发中,我们要对自定义的类进行类似于内置数据类型的 *** 作运算,这时就需要我们对运算符进行重载,给运算符新的功能,满足实际需求。

C++ 运算符重载的实质?

运算符重载的实质是函数重载或者函数多态,让开发人员用相同的函数名字完成不同的基本 *** 作。运算符函数形式如下:

<返回类型说明符> operator <运算符符号>(<参数表>)

{

     <函数体>

}

找个简单的例子 验证一下:

int operator<<(const int num);//声明

int Widget::operator<<(const int num)//定义
{
    return  num*3;
}

int b = w<<10;//定义
qDebug()<
运算符重载的规则:

(1)为了防止开发人员对标准的内置运算符进行重载,比如你要重载加法(+),把+重载成乘法          (*),当你输入int a ,int b后,会导致重载以后的二义性,因此要重载运算符的 *** 作对象中              必须有 一个自定义的类型。

(2)不能改变运算符的优先级,不能创建新的运算符。

(3)不能进行重载的运算符:成员运算符,作用域运算符,条件运算符,sizeof运算符,typeid         (一个RTTI运算符),const_cast、dynamic_cast、reinterpret_cast、static_cast强制类型转           换运 算符

重载运算符有两种形式?

重载为类的成员函数,或者重载为友元函数(类的非成员函数)

(1)重载为类的成员函数。

#ifndef PERSON_H
#define PERSON_H


class Person
{
public:
    Person();
    Person(int age,int sal);
    int getworkAge();
    int getsalary();
    Person operator*(const int num);
    friend Person operator+(const Person num1,const Person num2)
    {
        Person sum;
        sum.workAge = num1.workAge + num2.workAge;
        sum.salary = num1.salary+num2.salary;
        return sum;
    }
private:
    int workAge;
    int salary;

};

#endif // PERSON_H
#include "person.h"
Person::Person()
{
    workAge = 0;
    salary = 0;
}

Person::Person(int age, int sal)
{
    workAge = age;
    salary = sal;
}

Person Person::operator*(int num)
{
    Person sum;
    sum.workAge=workAge*num;
    sum.salary =salary*num;
    return sum;
}

int Person::getworkAge()
{
    return workAge;
}

int Person::getsalary()
{
    return  salary;
}

结果:

10 15

友元函数:

    friend Person operator+(const Person num1,const Person num2)
    {
        Person sum;
        sum.workAge = num1.workAge + num2.workAge;
        sum.salary = num1.salary+num2.salary;
        return sum;
    }

    Person a1(50,50);
    Person a2(50,50);
    Person a3 = a1+a2;
    qDebug()<

结果:

100 100

经验之谈:

一般来说:单目运算符重载为类的成员函数,双目运算符重载为类的友元函数.

双目运算符不能将 = 。 ()【】。-> 重载为类的友元函数。

当最左边的要求为类对象,而右边的是一个内置类型,则要为友元函数。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/798048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)