按位和 C++ 重载为非成员函数

Overloading bitwise & c++ as non-member function

本文关键字:成员 函数 重载 C++      更新时间:2023-10-16

尝试将 bit 和 c++ 中的重载为非成员函数

myClass.h

class myClass
{
     public:
     myClass(double);
     void setSomeValue(double);
     double getSomeValue() const{
        return someValue;
     }
     /*...more methods...*/

      private:
      double someValue;
};

我的班级.cpp

myClass::myClass(double someValue){
    setSomeValue(someValue);
}
myClass::setSomeValue(double someValue){
    this->someValue = someValue;
}
double operator&(myClass &lhs, myClass &rhs){
    return lhs.getSomeValue() * rhs.getSomeValue();
}

有人告诉我,我应该能够通过类getter访问类私有成员,从而拥有一个未声明为朋友的非成员函数。但是当我尝试时:

int main(){
    myClass A(0.1);
    myClass B(0.1);
    double test = A & B;
 }

我只是收到一条错误消息,说没有运算符"&"匹配这些操作数。我怎样才能做到这一点/我做错了什么?

我猜你没有在你的主程序中包含你的 & 运算符的声明。尝试放置

double operator&(myClass &lhs, myClass &rhs);

在您的 myClass.h 文件中。

这是您的代码示例的固定版本(不过我无法在任何阶段重现no operator "&"matches these operands错误消息):

myClass.h

class myClass
{
     public:
     myClass() : someValue() {}
     double getSomeValue() const{
        return someValue;
     }
     //...more methods...//

      private:
      double someValue;
};
// ***********************************************************************************
// * You need to make that global operator override visible through the header file: *
// ***********************************************************************************
inline double operator&(myClass &lhs, myClass &rhs){
    return lhs.getSomeValue() * rhs.getSomeValue();
}

main.cpp

#include <iostream>
#include "myClass.h"
int main(){
    myClass A;
    myClass B;
    double test = A & B;
    std::cout << test << std::endl;
 }

现场演示