簡體   English   中英

按位重載和C ++作為非成員函數

[英]Overloading bitwise & c++ as non-member function

試圖按位重載&在C ++中作為非成員函數

myClass.h

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


      private:
      double someValue;
};

myClass.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錯誤消息no operator "&"matches these operandsno 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;

 }

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM