根据我的理解(以及我的教科书所说的),对象是一个自包含的编程元素,它保存数据和对该数据执行操作的过程。有了这个说,为什么像cin,cout,string等东西被认为是对象? cin是一个对象,就像我定义的那样? cin是一个自包含单元的名称,它包含数据和一个对该数据执行操作的过程,可以在iostream头文件的源代码中找到?
答案 0 :(得分:11)
cin
和cout
是变量,因此它们是对象。
在C ++中,对象是一个不一定连续的存储区域,具有类型形式的关联内容解释。
这是由C ++标准定义的术语。
C ++11§1.8/ 1“ C ++程序中的构造创建,销毁,引用,访问和操作对象。 对象是一个 存储区域。 [注意:一个函数不是一个对象,无论它是否占用了存储空间 对象的方式。 -end note ]对象由定义(3.1), new-expression (5.3.4)或 在需要时通过实施(12.2)。当对象是时,确定对象的属性 创建。对象可以具有名称(第3条)。对象具有影响的存储持续时间 n(3.7) 它的生命周期(3.8)。对象具有类型(3.9)。术语对象类型是指对象所使用的类型 被建造。有些对象是多态的(10.3);该实现生成与之相关的信息 每个这样的对象,可以在程序执行期间确定该对象的类型。对于其他 对象,其中发现的值的解释由表达式的类型决定(第5条) 用来访问它们。
非连续性主要是为了支持多重继承,但至少有一位委员会成员在与我的讨论中强烈主张,它的目的是支持使对象一般不连续。但是,我知道没有现存的编译器可以做到这一点。这对我来说似乎毫无意义。
std::string
不是对象,它是一种类型。
注意:对于其他一些编程语言和一般的计算机科学,术语“对象”通常表示类类型的实例。在C ++中,即使是非类类型的实例,例如int
,也是对象。
答案 1 :(得分:1)
它们被视为对象,因为它们是“对象”。它们不是类型,它们是实例。
您可以看到它们的定义方式on cppreference。
示例:
extern std::istream cin;
extern std::wistream wcin;
如您所见,cin
是一个类型为std::istream
的变量。
关于std::string
的假设:再次cppreference is very helpful。
我们可以看到std::string
不是变量/对象,而是std::basic_string<char>
的类型别名。