理解c ++代码块

时间:2012-03-29 23:16:39

标签: c++ class

我获得了一个c ++ main并且必须对其进行编码才能正常工作。

我在理解代码时遇到了一些麻烦,因为我对cpp有点新鲜。

这是代码

int main(int argc, char *argv[]) {
  Class::setAtribute("string"); 
  Class(Class::CONSTANT) << "starting up..."; 
}

有些问题:

  1. 第一行如何在没有变量的情况下工作?它是静态的吗?

  2. 第二行对我来说真的很奇怪,我能说的是一个构造函数,它接受一个类constante然后以某种方式打印出来?

    如果有人能解释我这段代码,那就太棒了!

    提前致谢。

3 个答案:

答案 0 :(得分:2)

  

第一行如何在没有变量的情况下工作?它是静态的吗?

Class::setAtribute()必须是类Class中的静态函数。静态函数不需要类(对象)的实例。

  

第二行对我来说真的很奇怪,我能搞清楚的是一个构造函数,它接受一个类constante然后以某种方式打印出来?

是的,它构造了Class的实例,将Class::CONSTANT作为Class构造函数的参数传递。要编译Class(Class::CONSTANT) << "starting up...";,必须以:

的形式重载operator<<

作为Class(DavidRodríguez - dribeas)的成员函数:

<some_return_value_type> Class::operator<<(char const*);

或作为一个独立的功能:

<some_return_value_type> operator<<(Class const&, char const*);

或:

<some_return_value_type> operator<<(Class const&, std::string const&);

或者,在C ++ 11中:

<some_return_value_type> operator<<(Class&&, char const*);

事实上,第二个参数可以是任何可以从字符串文字char const[]构造的参数。或者,Class可以将转化运算符设置为std::ostream&,以便选择std::ostream& std::operator<<(std::ostream&, char const*)。在命名空间中查看Class定义和独立函数必须得出明确的答案。

答案 1 :(得分:0)

第一行是声明main函数,这是程序开始运行的地方。如果您习惯使用Java或C#,是的,它实际上是静态的;它与任何类的实例都没有关联。请记住,在C ++中,您可以拥有甚至不是类的 part 的独立函数。 main就是其中之一。

第二行是在名为setAtribute的类上调用名为Class的静态方法,并向其传递一个字符串参数。目前尚不清楚该行的目的是什么,但就其工作原理而言,它只是一个普通的函数调用,而不是构造函数。

编辑:我刚刚意识到当你说“第一线”时,你可能实际上意味着我称之为“第二线”的线。在那种情况下,你也在询问第三行。是的,那是构建一个类的临时实例,然后调用它的<<运算符(可能是打印一些东西)。

答案 2 :(得分:0)

  

第一行如何在没有变量的情况下工作?它是静态的吗?

最有可能的情况是,您应该检查标题以查找Class的定义并进行验证,但我确信这是一个静态方法调用。

  

第二行对我来说真的很奇怪,我能搞清楚的是一个构造函数,它接受一个类constante然后以某种方式打印出来?

你有这种感觉。最有可能(再次检查源)创建一个用Class初始化的Class::CONSTANT类型的临时对象(有一个与静态成员Class:CONSTANT的类型匹配的构造函数)。然后在那个临时调用operator<<。在这种特殊情况下,operator<<最有可能被实现为Class的成员函数,该函数可以使用const char*作为参数或者可以从中转换的内容,例如std::string。< / p>