我正在为Android应用程序上Udacity初学者类(class),它说该类是具有字段(变量)和方法的东西,可用于实例化对象。基本上,类是对象的蓝图,而对象是类的实例。

例如,如果我在xml文件中创建一个“TextView”对象,可以用其分配文本,textSize,textColor等,则该对象是“TextView”类的实例,该类已在Java中用以下方式定义:可以实例化的字段和方法。因此,对于TextView对象,我只是按照其字段和方法创建了'TextView'类的实例。

现在是我的困惑。

在C++中,“cin”和“cout”被称为“iostream”类的对象。但是,当我甚至没有在源代码中实例化cin和cout时,怎么可能已经将它们视为类的对象呢?

例如,在Java中,一旦我在xml源代码中创建了TextView,它将成为“TextView”类的对象。但是,甚至在我使用“iostream”类的字段和方法实例化cin和cout之前,它怎么可能充当“iostream”类的对象?如果cin和cout是iostream类的对象,是否表示它是iostream类的实例?

另外,我在Google上查询的很多定义都听起来像是“iostream”是包含cin和cout对象的对象,但是在层次结构意义上,对象不是类的实例而不是属于类的对象吗?当然,对象是根据类创建的,但是对象不是属于类的对象,就好像对象是一个较小的容器,位于较大的容器class中。因此,如果cin和cout是iostream的对象,那么它们是否不应该具有iostream定义的所有字段和方法?

我很难在这里连接点。

最佳答案



那是不对的。

这是标准对它们的类​​型的说明:

namespace std {
   extern istream cin;
   extern ostream cout;
   extern ostream cerr;
   extern ostream clog;

   ...
}



它们在标准头文件iostream中声明。它们在标准库的实现中定义。您无需在源代码中定义它们。


std::cinstd::istream类型的对象,而std::coutstd::ostream类型的对象。

您可以在public上调用std::istream的任何std::cin成员函数。
您可以在public上调用std::ostream的任何std::cout成员函数。

09-10 13:04
查看更多