Exponential Operator in C++

后端 未结 5 769
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-06 09:46

I am taking a class in C++ and I noticed there are only a few math operators to use. I also noticed that C++ does not come with an exponential operator within its math libr

5条回答
  •  独厮守ぢ
    2020-12-06 10:03

    Python has the ** operator for exponentiation. In C++ you can actually define an operator like that with some trickery. By combining the unary * operator with the binary * operator, like this:

    #include 
    #include 
    
    struct Num {
        double value;
    
        Num(double value) : value(value) { }
    
        typedef Num* HalfStar;
    
        HalfStar operator*() const { return HalfStar(this); }
        Num operator*(const HalfStar& rhs) const
        {
            return Num(std::pow(value, rhs->value));
        }
        Num operator*(const Num& rhs) const
        {
            return Num(value * rhs.value);
        }
    
        friend std::ostream& operator<<(std::ostream& os, const Num& n)
        {
            return os << n.value;
        }
    };
    
    int main(int argc, char**argv)
    {
        Num a = 10;
        Num b = 9;
    
        std::cout << "a*b = " << (a*b) << "\n";
        std::cout << "a**b = " << (a**b) << "\n";
    
        return 0;
    }
    

    This will not work with non-class types though, so you can not do: x**2.

    See here for a live example.

提交回复
热议问题