只是出于好奇:为什么C++选择a = new A而不是a = A.new作为实例化对象的方式?后者看起来不是更像面向对象吗?

最佳答案



可以?
这取决于您如何定义“面向对象”。

如果定义它,那么Java的方式就是“所有内容都必须具有“X.Y”形式的语法,其中X是一个对象,而Y是您想要对该对象执行的操作,那么是的,您是对的。不是面向对象的,而Java是OOP编程的顶峰。

但幸运的是,也有人认为“面向对象”应该与对象的行为有关,而不是与对象使用哪种语法有关。从本质上讲,它应该归结为Wikipedia页面所说的内容:



请注意,它没有对语法进行任何说明。它没有说“您必须通过指定对象名称,后跟点号和函数名称的方式来调用每个函数”。

有了这个定义,foo(x)x.foo()完全一样面向对象。
重要的是x是一个对象,即,它由数据字段和一组可用来对其进行操作的方法组成。在这种情况下,foo显然是这些方法之一,无论它在何处定义,以及无论在调用它时使用哪种语法。

C++专家很早就意识到了这一点,并撰写了诸如this之类的文章。
对象的接口(interface)不仅是成员方法的集合(可以使用点语法来调用)。这是一组可以操纵对象的功能。他们是成员还是 friend 并不重要。只要对象能够保持一致即可,它就是面向对象的,也就是说,它能够防止任意函数与之混淆。

那么,为什么A.new会更加面向对象?这种形式将如何给您“更好”的对象?

OOP背后的主要目标之一是允许使用更多可重用的代码。

如果new是每个类的成员,那意味着每个类都必须定义自己的new操作。当它是一个非成员时,每个类都可以重用同一类。由于功能是相同的(分配内存,调用构造函数),为什么不将其放在所有类都可以重用的公开位置? (抢先的nitpick:当然,在这种情况下,同样的new实现也可以重用,方法是从某个通用基类继承,或者仅通过一点点编译器魔术。但是最终,为什么麻烦了,何时我们可以将类之外的机制)

关于c++ - 创建对象: A.新的还是新的A?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1581809/

10-11 22:07
查看更多