csg*_*guy 2 c++ class definition object object-lifetime
一个类就像一个蓝图,一个对象就像是用该蓝图建造的房屋。
您可以拥有许多具有相同布局/平面图的房屋(读取类),但每个房屋都是其自己的实例(读取对象)。每个人都有自己的所有者,家具等。
Note that there are also objects whose blueprint is not a class (e.g. integers).
In summary, there are different types of object (e.g. int, float, etc.). You can create user-defined types, called 'classes'.
In C++, the term object is used for instances of any type, including classes and fundamental types.
However, according to http://www.cplusplus.com/doc/tutorial/classes/
An object is an instantiation of a class. In terms of variables, a class would be the type, and an object would be the variable.
Isn't that statement inaccurate? An object could be an instantiation of a class, but it could also be an instance of a fundamental type.
那么什么是实例化?创建基本类型(例如int x = 3;)的实例是否被视为“实例化”?由于从技术上讲,它正在创建类型的实例。
对象是类型的实例。
继续您的问题:
那个陈述(cppreference之一)不准确吗?对象可以是类的实例化,但也可以是基本类型的实例。
你是对的。
另外,是否不会将基本类型的实例(例如int x = 3;)创建为“实例化”?由于从技术上讲,它正在创建类型的实例。
再次,正确。
个人建议:不必过多担心确切的定义,而将更多的精力花在“通过编写代码学习”上
实例化如何定义?
好的,由于您一直坚持,这是我的建议:
您在网上或书籍中发现的所有定义都不具有权威性。关于这些事情的唯一授权是C ++标准:快看一下:N4713。如您所见,该标准过于技术性,难以解析和理解。之所以这样,是因为它绝不意味着要用于学习,而是要彻底且明确地定义语言的语法和语义。这是编译器实现者在编写用于将C ++源代码转换为机器代码的编译器时所使用的文档。
由于该标准不是学习C ++的方法,因此每个人都提出了自己的定义和术语,旨在更轻松地传达有时更为复杂的问题。这样做时,有时您看到的定义不完整,或略有错误,或者不适用于奇怪的极端情况。您会发现相同的术语在不同的作者中使用时略有不同。这是坏事吗?也许吧,但不是很多。学习时,掌握简单的概念和工具非常重要,这样您就可以一次完成一个步骤。失去“严格的彻底性”对于付出恕我直言是不小的代价,但是我看到这对于那些认真地学习每句话的人来说是多么的困惑。
回到您的问题:在标准中,就我所知,术语“实例化”在这种意义上并没有使用,而是用于“模板实例化”,这是另一回事。
但这没关系,我们不需要了解简单概念的标准。对于您的上下文,实例化是对象的创建。这是一个非常简单的概念,请不要过分考虑。
C ++标准出于不同的目的使用“实例化”,但是您仍然可以理解该概念。如果可以的话,给它起个别的名字。