2010-10-19 121 views
4

我正在学习C++的过程中,以了解我已经给出的一些开源代码。C++初学者问题

我通过管道传来如下:

cmd << '\n' 

我以为,“CMD”必须是一个流某种特殊受体,也许是一个字符串 - 但在进一步调查中,我发现,“CMD”是一个具有各种数据和功能的整个班级。这完全困惑了我。为什么不代码如下所示:

cmd.stringpart << '\n' 

谁能告诉我这是怎么回事,还是建议一篇文章给我看看。

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

+1

你是说,cmd是一个类还是一个类的实例(即“经营者<<”被定义为其中一些类型的变量)?如果是后者,应该有一个函数调用操作符<<(“键入cmd”,字符*)或类似的东西。我们可以看看吗? – andand 2010-10-19 13:28:32

+0

请参阅编辑至OP。 – Mick 2010-10-19 13:31:28

回答

4

请参阅运算符作为函数:例如,3 + 4调用一个采用两个数字并返回它们的总和的二元函数。

在这里,作者创建了这样一个函数来定义运算符,以便它可以使用cmd类实例作为左参数,并使用字符串作为正确的参数。这被称为“操作员重载”。寻找运营商< <发生在您的代码中。

这也可以是在CMD类的成员函数,取一个参数(静止命名操作者< <)。

4

我第一次检查,看看是否该cmd的类的实例覆盖<<运营商 - 这将告诉你什么是这个代码怎么回事。

2

检查本课程中操作符重载 - 您应该在其名称中寻找具有'< <'的函数。

2

听起来像ostream运营商(< <)已被超载。在类定义中寻找一种名为“operator < <”的方法。 C++允许程序员“重载”或重新定义运算符(包括+, - ,*,/,++, - 等)对类的处理方式。参考任何C++文本来讨论这个问题。

7

在C++中,可以重载操作符。在这种情况下,它似乎被用来使某些Cmd类的行为像一个流。

0

在许多语言,包括C++ 你被允许做什么它被称为“运算符重载”

在你的代码,如果你有例如,你反复执行操作,一般用于清洁和更加便利着想代码,你可以选择一个现有的操作符(如 - ,+ =,==,<,<,>>),并在本地重新定义它,也就是说可以随意使用它。

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

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

因此,通常每个容器类都有方法来处理存储的实例,删除,添加,比较(...)实例。比方说,你想比较富富与实例佑= FooContainer [0]存储在与“==”中,一些库会要求你反正重新定义,从而覆盖“==”运算符,其中一些你的容器将承担。例如,他们将返回true仅当(foo.a == woo.a & & foo.b == woo.b & & foo.c的== woo.c)是真实的。

嗯,也许两个实例,是您使用相同的只有他们的“C”是一样的,那么你可以重写“==”。你通常会在Foo中这样做,就在构造函数下。它会类似于此:

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

底线:

  • 如果你不能让意义上的操作,你可能想看看技术指南是否存在。如果没有,去头文件,重写类等,探索覆盖运营商深入的代码之前。
  • 您也想熟悉他们自己,因为(a)你可能在某些情况下使用,(B),它可能给你想要的超轻松的功能,(C),它可以让你的代码干净和简单。

希望它可以帮助..