重载运算符 * C++

Overloading operator * in C++

本文关键字:C++ 运算符 重载      更新时间:2023-10-16

我想重载运算符*,这样:

#include <iostream>
using namespace std;
class A{
    public:
        double liczba;
    A operator * (int a){
        A b;
        b.liczba = this->liczba * a;
        return b;
    }
};

int main(){
    A a;
    2*a;
    return 0;
}

我收到错误,我知道 a*2 不会引起问题,但如何做 2*a?

你需要声明一个朋友运算符:

class A{
    public:
        double liczba;
    A operator * (int a){
        A b;
        b.liczba = this->liczba * a;
        return b;
    }
    friend A operator*(int a, A & b);// friend operator
};
A operator*(int a, A & b)
{
    return b * a;
}

理想情况下,A & bconst A & b的,但你也需要声明你已经定义的运算符是const的。

应将运算符声明为非成员函数。例如

A operator * ( const A &a, int x )
{
    A b;
    b.liczba =  a.liczba * x;
    return b;
}
A operator * ( int x, const A &a )
{
    A b;
    b.liczba =  a.liczba * x;
    return b;
}

这是一个演示程序

#include <iostream>
class A{
    public:
        double liczba;
};

A operator * ( const A &a, int x )
{
    A b;
    b.liczba =  a.liczba * x;
    return b;
}
A operator * ( int x, const A &a )
{
    A b;
    b.liczba =  a.liczba * x;
    return b;
}
int main() 
{
    A a = { 10 };
    A b = 2 * a * 5;
    std::cout << b.liczba << std::endl;
    return 0;
}

程序输出为

100

您可以声明一个非成员函数:

A operator*( int i, const A & a ) {
    A b;
    b.liczba = a.liczba * i;
    return b;
}

这是一个工作示例。