只是出于好奇:为什么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/