C ++初学者问题

时间:2010-10-19 13:22:19

标签: c++

我正在学习C ++,以便了解我给出的一些开源代码。

我遇到如下行:

cmd << '\n'

我认为“cmd”必须是流的某种特殊接受者,也许是一个字符串 - 但是在进一步研究中,我发现“cmd”是一个具有各种数据和功能的整个类。这让我很困惑。为什么代码看起来不像这样:

cmd.stringpart << '\n'

有人可以告诉我发生了什么,或者建议给我一篇文章来看看。

更正: cmd是类的实例,而不是类本身。

6 个答案:

答案 0 :(得分:7)

在C ++中,您可以重载运算符。在这种情况下,似乎用于使某些Cmd类的行为类似于流。

答案 1 :(得分:4)

我首先检查一下cmd是一个实例的类是否会覆盖<<运算符 - 这将显示此代码中的内容。

答案 2 :(得分:4)

将运算符视为函数:例如,3 + 4调用二进制函数,取两个数字并返回它们的总和。

在这里,作者创建了这样一个函数来定义&lt;&lt;运算符,以便它可以使用cmd类实例作为左参数,将字符串作为正确的参数。这称为“运算符重载”。在代码中查找运算符&lt;&lt; 出现次数。

这也可以是cmd类的成员函数,带一个参数(仍然命名为 operator&lt;&lt; )。

答案 3 :(得分:2)

检查此类中的运算符重载 - 您应该使用'&lt;&lt;'来寻找函数用它的名字。

答案 4 :(得分:2)

听起来像ostream运算符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;寻找一个名为“operator&lt;&lt;”的方法在类定义中。 C ++允许程序员“重载”或重新定义运算符(包括+, - ,*,/,+, - ,等)与其类一起工作的方式。有关此问题的讨论,请参阅任何C ++文本。

答案 5 :(得分:0)

在许多语言中,包括C ++ 你被允许做所谓的“操作员超载”

在你的代码中,如果你有一个例如你重复执行的操作,通常为了更清晰和更方便的代码,你可以选择一个现有的运算符(例如 - ,+ =,==,&lt;&lt; ,&gt;&gt;)并在本地重新定义,即覆盖,然后随意使用它。

在某些情况下,您可以覆盖运算符以在库中创建所需的功能。例如:     - 您创建了一个主要用于存储信息块的类。然后,使用容器类(来自各种库)来存储类的实例。

Foo {
     int a;
     int b;
     std::string c;
}

因此通常每个容器类都有方法来处理,删除,添加,比较(...)存储的实例。假设您要将Foo foo的实例与存储在容器中的woo = FooContainer [0]与“==”进行比较,某些库将要求您重新定义,因此无论如何都要覆盖“==”运算符,其中一些将承担。例如,只有当(foo.a == woo.a&amp;&amp; foo.b == woo.b&amp;&amp; foo.c == woo.c)为真时,它们才会返回true。

好吧,也许两个实例只有在它们的'c'相同时才能使用,那么你可以覆盖“==”。您通常会在构造函数下的Foo中执行此操作。它看起来与此类似:

bool operator==(const Foo &foo) const {return c == foo.c;} 

底线:

  • 如果有一项操作无法理解,您可能需要查看技术指南(如果存在)。如果没有,请转到头文件,覆盖类等以深入研究代码之前探索覆盖的运算符。
  • 你也想亲自熟悉它们,因为(a)在某些情况下你可能会使用它,(b)它可能会给你超级容易的功能,(c)它可以让你的代码干净简单。

希望有所帮助......