Ida*_*878 2 c++ operator-overloading
我试图更深入地理解运算符重载,所以我使用了这段代码.如果我正确理解当我在类外部重载一个操作符时,它被称为全局运算符,因此我可以将每个对象放在前缀或后置修复形式中,在这种情况下我使用Double(我的类)和double.
这段代码工作正常,我正在努力弄清楚为什么.具体在主要功能.d***b为什么d*b与d*******b相同?
friend std :: ostream& operator<<(std :: ostream& out, const Double& d);
friend std :: istream& operator>>(std :: istream& in, Double& d);
Double const& operator*() const { return *this; }
friend double my_pow(double,Double);
};
double my_pow(double x ,Double i) {
return pow(x,i._p);
}
double operator*(double a, Double const& b) {
return my_pow(a,b);
}
std :: ostream& operator<<(std :: ostream& out, const Double& d) { return out<<d._p; }
std :: istream& operator>>(std :: istream& in, Double& d) { return in>>d._p; }
int main()
{
Double d(10);
Double b(2);
double a = d***b;
}
Run Code Online (Sandbox Code Playgroud)
当你写作
d***b
Run Code Online (Sandbox Code Playgroud)
C++将其解释为
d*(*(*b))
Run Code Online (Sandbox Code Playgroud)
鉴于此,让我们看看哪些运营商被调用.当C++看到
*b
Run Code Online (Sandbox Code Playgroud)
它会寻找
operator*以无参数命名的成员函数,或operator*用一个参数命名的自由函数.基于此,调用哪个重载?什么是*b评价什么?
接下来,当C++看到某种形式时
a * b
Run Code Online (Sandbox Code Playgroud)
它会寻找
a是operator*使用单个参数命名的类型,或operator*两个参数的自由函数.基于此,调用哪个函数?
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |