我正在学习C++的过程中,以了解我已经给出的一些开源代码。C++初学者问题
我通过管道传来如下:
cmd << '\n'
我以为,“CMD”必须是一个流某种特殊受体,也许是一个字符串 - 但在进一步调查中,我发现,“CMD”是一个具有各种数据和功能的整个班级。这完全困惑了我。为什么不代码如下所示:
cmd.stringpart << '\n'
谁能告诉我这是怎么回事,还是建议一篇文章给我看看。
更正: cmd是类的一个实例,而不是类本身。
我正在学习C++的过程中,以了解我已经给出的一些开源代码。C++初学者问题
我通过管道传来如下:
cmd << '\n'
我以为,“CMD”必须是一个流某种特殊受体,也许是一个字符串 - 但在进一步调查中,我发现,“CMD”是一个具有各种数据和功能的整个班级。这完全困惑了我。为什么不代码如下所示:
cmd.stringpart << '\n'
谁能告诉我这是怎么回事,还是建议一篇文章给我看看。
更正: cmd是类的一个实例,而不是类本身。
请参阅运算符作为函数:例如,3 + 4
调用一个采用两个数字并返回它们的总和的二元函数。
在这里,作者创建了这样一个函数来定义运算符,以便它可以使用cmd类实例作为左参数,并使用字符串作为正确的参数。这被称为“操作员重载”。寻找运营商< <发生在您的代码中。
这也可以是在CMD类的成员函数,取一个参数(静止命名操作者< <)。
我第一次检查,看看是否该cmd
的类的实例覆盖<<
运营商 - 这将告诉你什么是这个代码怎么回事。
检查本课程中操作符重载 - 您应该在其名称中寻找具有'< <'的函数。
听起来像ostream运营商(< <)已被超载。在类定义中寻找一种名为“operator < <”的方法。 C++允许程序员“重载”或重新定义运算符(包括+, - ,*,/,++, - 等)对类的处理方式。参考任何C++文本来讨论这个问题。
在C++中,可以重载操作符。在这种情况下,它似乎被用来使某些Cmd类的行为像一个流。
在许多语言,包括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;}
底线:
希望它可以帮助..
你是说,cmd是一个类还是一个类的实例(即“经营者<<”被定义为其中一些类型的变量)?如果是后者,应该有一个函数调用操作符<<(“键入cmd”,字符*)或类似的东西。我们可以看看吗? – andand 2010-10-19 13:28:32
请参阅编辑至OP。 – Mick 2010-10-19 13:31:28