对象和实例之间的区别:C ++

乔伊·罗汉

我关注了很多关于SO的帖子,最后我可以得出一个结论,当我们有类似这样的内容时:

Person name;

name是类的对象person

实例化它成为实例:

name=new Person();

我是C ++的初学者,到目前为止,我已经看到我们可以访问以下函数和变量:

Person name;
name.getValue;
name.callFunction();

我们不需要为此使用new运算符。那么我们可以说在C ++中可以忽略对象和实例之间的区别因素吗?

Yakk-亚当·内夫罗蒙特

在C ++中,“对象”和“实例”几乎可以互换使用。

有一个通用的编程设计模式classinstanceclass保存有关的所有信息instance中,且s class

在C ++中,当您声明aclass或时struct,编译器将编写代码来描述您如何创建instanceof,class数据布局是什么,并提供一些可用于与之交互的方法instance(包括销毁)。

virtual方法和继承似乎将某些方法和布局移至实例:但是数量非常有限。而是,每个实例都拥有指向virtual类数据的指针在某些语言中,您可以执行一些操作,例如在运行时替换实例的单个方法:但在C ++中则不能。

当您创建class的实例时,struct可以通过堆栈上的自动命名变量(如Foo f;),匿名自动命名变量(如some_function( Foo(17,22) )),免费商店中的实例(如new Foo(17, 22))或通过placement- new(即如何std::vectorstd::make_shared创建实例)。

令人困惑的是,有一个单独的并行class-instance图案在C ++ - - class template classclass templateclass,该实例是实例。template参数和专业化指示如何,在编译时,可以在“结构”的classES。上的模式匹配class template提供了与实例无关的有限数量的属性(模式中的“类属性”)。(可以说函数template-function是该模式的另一个实例)。

如果您对精简概念C ++ 1y提案有所了解,您将看到对象和实例在C ++中可能意味着不同的含义。

int x = 0;
int& foo = x;
int* bar = &x;

x是类型的对象和实例int

foo是type的实例int&,但是调用foo对象可能是错误的!它是一个引用-别名,或某个对象的其他名称(在本例中为x)。

bar是指向的指针int,该指针是type的实例int*,并且将其称为对象可能是正确的。

这是一个有用的区别:如果类型是引用类型,则它不必表示对象类型。对象类型在许多重要方面的行为与引用类型不同。

现在,某些类型具有“引用语义”,因为它们在许多方面的行为都类似于引用,但实际上是classes。这种类型的实例是否更好地称为引用或对象?在可怕的情况下,某些实例同时具有引用和对象语义的混合:这通常是一个不好的信号。

通过3.9 [Types]中的最新标准,我们有了C ++中的各种类型。它们描述了什么是对象类型

类型描述对象(1.8),引用(8.3.2)或函数(8.3.5)

对象类型是(可能是cv限定的)类型,不是函数类型,引用类型和void类型。

因此,将函数类型或引用类型的事物的“实例”称为“对象”似乎是不正确的。请注意,访问函数或引用实例的“表示形式”基本上是不可能的:将别名引用到它们所引用的对象中,并且使用函数名称会在帽子放下时衰减为指向函数的指针(并且函数指针基本上是不透明的句柄,可让您调用它们)。

因此可以说函数不是实例,引用不是实例。

第三,我们确实讨论了class templates和函数templates的实例化14.7是“模板实例化和专门化”,实例化点(的template全部)均为标准的正式术语。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象和实例之间的区别

来自分类Dev

使用模块模式和实例化新对象之间的区别

来自分类Dev

“类型”,“实例”,“类”和“对象”概念之间的区别

来自分类Dev

对象数组,Java和C ++之间的区别

来自分类Dev

C ++定义和实例化之间有什么区别?

来自分类Dev

变量和对象之间的区别

来自分类Dev

对象和类之间的区别

来自分类Dev

C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

来自分类Dev

C ++内联匿名实例和命名实例之间的区别

来自分类常见问题

map和forEach实例修改之间的区别

来自分类Dev

实例和值表示之间的区别

来自分类Dev

类变量和实例变量之间的区别

来自分类Dev

Java扩展和实例变量之间的区别

来自分类Dev

类的实例和对象之间的基本区别是什么?

来自分类Dev

类的实例和对象之间的基本区别是什么?

来自分类Dev

克隆对象和普通对象之间的区别

来自分类Dev

对象和变量对象之间的区别

来自分类Dev

AWS 上的实例和预留实例之间的区别

来自分类Dev

使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

来自分类Dev

C ++中+ =和= +之间的区别

来自分类Dev

};之间的区别 和}在C ++中

来自分类Dev

C ++和while之间的区别?

来自分类Dev

对象,动态和变量之间的区别

来自分类Dev

对象的LinkedList和HashMap的LinkedList之间的区别?

来自分类Dev

ActiveRecord和ActiveRecord :: Relation对象之间的区别

来自分类Dev

对象路由和RouteValueDictionary路由之间的区别

来自分类Dev

str和对象类型之间的熊猫区别

来自分类Dev

ActiveRecord和ActiveRecord :: Relation对象之间的区别

来自分类Dev

Tkinter 对象的“ID”和“标签”之间的区别

Related 相关文章

热门标签

归档