标签: operator-overloading

覆盖Python的'in'运算符?

如果我在Python中创建自己的类,我应该定义什么函数以允许使用'in'运算符,例如

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...
Run Code Online (Sandbox Code Playgroud)

python operator-overloading operators in-operator

177
推荐指数
3
解决办法
6万
查看次数

运算符在Java中重载

请问您是否可以在Java中重载运算符?如果它在Java中的任何地方使用,请告诉我有关它的信息.

java operator-overloading

172
推荐指数
9
解决办法
19万
查看次数

运算符使用C#扩展方法重载

我正在尝试使用扩展方法向C#StringBuilder类添加一个operater重载.具体来说,给定StringBuilder sb,我想sb += "text"成为等同于sb.Append("text").

以下是为以下内容创建扩展方法的语法StringBuilder:

public static class sbExtensions
{
    public static StringBuilder blah(this StringBuilder sb)
    {
        return sb;
    }
} 
Run Code Online (Sandbox Code Playgroud)

它成功地将blah扩展方法添加到了StringBuilder.

不幸的是,运算符重载似乎不起作用:

public static class sbExtensions
{
    public static StringBuilder operator +(this StringBuilder sb, string s)
    {
        return sb.Append(s);
    }
} 
Run Code Online (Sandbox Code Playgroud)

除其他问题外,this在此上下文中不允许使用关键字.

是否可以通过扩展方法添加运算符重载?如果是这样,那么正确的方法是什么?

c# extension-methods operator-overloading

167
推荐指数
3
解决办法
4万
查看次数

当操作符超载时,如何可靠地获取对象的地址?

考虑以下程序:

struct ghost
{
    // ghosts like to pretend that they don't exist
    ghost* operator&() const volatile { return 0; }
};

int main()
{
    ghost clyde;
    ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( 
}
Run Code Online (Sandbox Code Playgroud)

我怎么得到clyde地址?

我正在寻找一种适用于所有类型对象的解决方案.C++ 03解决方案会很好,但我也对C++ 11解决方案感兴趣.如果可能,让我们避免任何特定于实现的行为.

我知道C++ 11的std::addressof函数模板,但我不想在这里使用它:我想了解标准库实现者如何实现这个函数模板.

c++ operator-overloading memory-address c++11

167
推荐指数
5
解决办法
2万
查看次数

是什么让Scala的运营商重载"好",但是C++的"糟糕"?

C++中的运算符重载被许多人认为是坏事(tm),并且在新语言中不会重复错误.当然,这是设计Java时专门删除的一个功能.

现在我开始阅读Scala,我发现它看起来非常像运算符重载(虽然从技术上来说它没有运算符重载,因为它没有运算符,只有函数).但是,它似乎与C++中的运算符重载没有本质上的区别,因为我记得运算符被定义为特殊函数.

所以我的问题是什么使得在Scala中定义"+"的想法比在C++中更好?

c++ scala operator-overloading

153
推荐指数
8
解决办法
2万
查看次数

是否存在重载&&和||的原因 不要短路?

运算符的短路行为&&,并||是程序员的好工具.

但为什么他们在超载时会失去这种行为?我理解运算符只是函数的语法糖,但操作符bool有这种行为,为什么它应该限制在这种类型?这背后有任何技术推理吗?

c++ operator-overloading short-circuiting logical-operators c++11

136
推荐指数
8
解决办法
1万
查看次数

operator <<应该实现为朋友还是成员函数?

这基本上就是问题,是否有"正确"的实施方式operator<<?读这个我可以看到类似的东西:

friend bool operator<<(obj const& lhs, obj const& rhs);
Run Code Online (Sandbox Code Playgroud)

喜欢这样的东西

ostream& operator<<(obj const& rhs);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么要使用其中一个.

我的个人案例是:

friend ostream & operator<<(ostream &os, const Paragraph& p) {
    return os << p.to_str();
}
Run Code Online (Sandbox Code Playgroud)

但我可能会这样做:

ostream & operator<<(ostream &os) {
    return os << paragraph;
}
Run Code Online (Sandbox Code Playgroud)

我应该根据这个决定做出什么理由?

注意:

 Paragraph::to_str = (return paragraph) 
Run Code Online (Sandbox Code Playgroud)

其中段落是一个字符串.

c++ operator-overloading

121
推荐指数
6
解决办法
12万
查看次数

重载成员访问运算符 - > ,.*(C++)

据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等.

特别是,传递给这些操作符函数的内容以及应返回的内容是什么?

操作员如何运作(例如operator->(...))知道所指的成员是什么?可以知道吗?它甚至需要知道吗?

最后,是否需要考虑常见因素?例如,当重载类似的东西时operator[],通常你需要const和非const版本.成员访问运算符是否需要const和非const版本?

c++ operator-overloading c++-faq

119
推荐指数
5
解决办法
8万
查看次数

如何在没有无限递归的'=='运算符重载中检查空值?

以下将导致==运算符重载方法的无限递归

    Foo foo1 = null;
    Foo foo2 = new Foo();
    Assert.IsFalse(foo1 == foo2);

    public static bool operator ==(Foo foo1, Foo foo2) {
        if (foo1 == null) return foo2 == null;
        return foo1.Equals(foo2);
    }
Run Code Online (Sandbox Code Playgroud)

我如何检查空值?

.net c# operator-overloading

110
推荐指数
4
解决办法
6846
查看次数

`+ =`的C#运算符重载?

我试图做操作符重载+=,但我不能.我只能让操作员超载+.

怎么会?

编辑

这不起作用的原因是我有一个Vector类(带有X和Y字段).请考虑以下示例.

vector1 += vector2;
Run Code Online (Sandbox Code Playgroud)

如果我的运算符重载设置为:

public static Vector operator +(Vector left, Vector right)
{
    return new Vector(right.x + left.x, right.y + left.y);
}
Run Code Online (Sandbox Code Playgroud)

然后结果将不会添加到vector1,而是vector1也将通过引用成为全新的Vector.

.net c# operator-overloading .net-4.0 c#-4.0

109
推荐指数
8
解决办法
9万
查看次数