operator-overloading 相关问题

运算符重载是编程语言的一个特性,它允许运算符的自定义实现,具体取决于所涉及的操作数的类型。有些语言允许定义新的运算符,而其他语言只允许重新定义现有的运算符。

实现operator==和operator是否安全< using std::memcmp?

看到这个问题后,我的第一个想法是定义通用等价和关系运算符是微不足道的: #包括 模板 布尔运算符==(缺点...

回答 6 投票 0

c++ - 运算符 [] 无法与手工制作的结构堆栈正常工作?

我正在学习内存管理并使用结构在堆中手工制作堆栈。这部分有效,但后来我决定也尝试学习运算符重载,并决定尝试制作所有元素

回答 1 投票 0

C++ 运算符重载和多态性

多态性和运算符重载会混合在一起吗? 没有指针就无法实现多态性,正如本答案中所解释的那样,并且您也无法使用指针进行运算符重载,如 expl...

回答 4 投票 0

c++ 运算符重载和多态性

多态性和运算符重载会混合在一起吗? 没有指针就无法实现多态性,正如本答案中所解释的那样,并且您也无法使用指针进行运算符重载,如 expl...

回答 4 投票 0

重载间接运算符以匹配下标运算符?

我正在尝试编写一个行为类似于 std::set 的类 - 因为元素都是唯一的,并且添加集合中已有的元素不会执行任何操作 - 但是,其中的元素...

回答 1 投票 0

类本身的运算符重载

我觉得这段代码应该可以工作,但是第二个表达式失败了。这是为什么? 类 Foo: @类方法 def __matmul__(cls, 其他): 返回“abc”+其他 打印(Foo.__matm...

回答 1 投票 0

如何实现成员方法指针的比较/较少运算符?

从我的阅读中,我了解到可以使用任一运算符来比较 C++ 中的某些指针类型< or std::less. This is useful if, for example, a pointer is used as a key for a std:...

回答 1 投票 0

我如何用两种方式输出 <<?

例如,如果我想要使用 << and a detailed version. myClass myObject(//Constructor parameters); cout << myObject << "\n"; c...

回答 3 投票 0

我如何用两种方式输出 <<? C++

例如,如果我想要使用 << and a detailed version. myClass myObject(//Constructor parameters); cout << myObject << "\n"; c...

回答 1 投票 0

隐式运算符和类型转换器等效吗?

在我看来,与 TypeConverter 相比,实现隐式运算符非常容易,所以我假设它们不等价,因为框架中 TypeConverters 的流行(参见任何...

回答 4 投票 0

构造函数与“=”运算符做同样的事情吗?

当我们没有定义任何 = 运算符时,编译器如何知道 使用构造函数? 构造函数不是只在定义变量时调用吗? #包括 类人 { 民众: ...

回答 1 投票 0

如何重载运算符<<(double const&) in an inherited std::stringstream?

我想覆盖运算符<< such that: double d = 3.0; mycustomstringstream << "Hello World " << d << "what a nice day."; std::cout <<

回答 1 投票 0

如何超载<<opeartor(double const&) in an inherited std::stringstream

我想覆盖 < 我想覆盖 <<opeartor 这样 double d = 3.0; mycustomstringstream << "Hello World " << d << "what a nice day."; std::cout << mystream.str() << std::endl; 将产生监视器输出 Hello World (double)(3.00000000000)what a nice day. 我尝试了什么 压倒一切 因为我可以像这样打印双打,所以我大胆地实现了: std::ostream& operator<<(std::ostream& o, double const& d){ o<<"(double)("<< d << ")"; return o; } 这不起作用,因为编译器会解释歧义(因为该运算符已经定义)。 继承 就像一开始一样,我可以从 std::stringstream 继承,只需替换我的自定义字符串流的该运算符的定义即可: #include<sstream> class MyCustomStringStream: public std::stringstream{}; MyCustomStringStream& operator<<(MyCustomStringStream& o, double const& d){ o<<"(double)("<< ( (std::stringstream)(o) << d ) << ")"; return o; } 这里的错误是: error: use of deleted function 'std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>::basic_stringstream(const std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' 那么那么: #include <iostream> #include <sstream> class MyStringStream: public std::stringstream{ std::stringstream aux; public: MyStringStream& operator<<(double const& d){ aux.str() = ""; aux << std::scientific << "((double)(" << d << ")"; *this << aux.str(); return *this; } }; int main() { double d = 12.3; MyStringStream s; s << "Hello World " << d << "what a nice day."; std::cout << s.str() << std::endl; } 但这仍然印着我 Hello World 12.3what a nice day. 演示[ https://godbolt.org/z/daG3bo6hv ] 无论你怎么想,继承通常都不是问题。无论如何,我不会从流派生(通常不建议从 STL 类型继承,尽管流允许这样做)。 对于您的情况,有一个更可重用的解决方案,制作一个辅助格式化对象: #include <iostream> #include <sstream> template<typename type_t> struct as_scientific { type_t value; }; template<typename type_t> std::ostream& operator<<(std::ostream& os, const as_scientific<type_t>& scientific) { os << std::scientific << "((" << typeid(type_t).name() << ")(" << scientific.value << ")"; return os; } int main() { double d = 12.3; std::ostringstream s; s << "Hello World " << as_scientific{d} << "what a nice day."; std::cout << s.str() << "\n"; // or directly std::cout << as_scientific{d} << "\n"; }

回答 1 投票 0

如何在 Ada 中重载下标/子程序调用运算符

我们都知道并喜爱 Ada.Containers.Vectors。这是其用法的示例: 与 Ada.Text_IO; 与 Ada.Containers.Vectors; 程序示例是 使用 Ada.Text_IO; 包 Vectors_Integer 是 ...

回答 1 投票 0

C++ 中的对象如何找到右值引用(未命名值)? [重复]

我有一个名为 Matrix 的类。我想要重载运算符!返回矩阵的转置。 当主矩阵是一个未命名的对象时,我更喜欢使用它分配的内存来构造转置矩阵,

回答 1 投票 0

Python 中的多个运算符重载

我有 2 个带有 + 运算符重载的点类: Point2D 类: x = 0 y = 0 def __add__(self, __other: "Point2D"): 返回 Point2D(self.x + __other.x, self.y + __ot...

回答 1 投票 0

为什么拥有<< operator in a global namespace?

我有这段代码,但我不明白它是如何工作的: #包括 #包括 #包括 #包括 typedef std::pair elem...

回答 1 投票 0

如何解决字符串中“operator=”的歧义重载

我正在尝试创建一个可以隐式转换为各种不同类型(基元和自定义定义的类)的类。我希望能够转换为的类型之一是 std::...

回答 1 投票 0

+= python 中的 __setitem__ 运算符(添加方括号)

在以下语句中定义类行为: 我的对象[项目] = ... 我知道我需要定义 __setitem__ 方法。 我需要为以下语句定义什么方法: 我的_obj...

回答 3 投票 0

在模板结构体中重载结构体的运算符

我有一个模板结构 Foo,它定义了一个内部结构 Bar。 现在,我想重载流运算符 << for this inner struct Bar but the compiler seems to ignore my overload

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.