gpt4 book ai didi

c++ - 创建对象 : A. new 还是 new A?

转载 作者:可可西里 更新时间:2023-11-01 18:41:49 30 4
gpt4 key购买 nike

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

最佳答案

Just out of curiosity: Why C++ choose a = new A instead of a = A.new as the way to instance-lize an object? Doesn't latter seems more like more object-oriented?

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

如果您定义它,就像 Java 那样,“一切都必须具有格式为“X.Y”的语法,其中 X 是一个对象,而 Y 是你想用那个对象做什么,那么是的,你是对的。这不是面向对象的,Java 是 OOP 编程的巅峰之作。

但幸运的是,也有一些人认为“面向对象”应该与对象的行为相关,而不是对象使用的语法。本质上应该归结为 Wikipedia页面说:

Object-oriented programming is a programming paradigm that uses "objects" – data structures consisting of datafields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as information hiding, data abstraction, encapsulation, modularity, polymorphism, and inheritance

请注意,它没有说明语法。它没有说“并且您必须通过指定一个对象名称后跟一个点和函数名称来调用每个函数”。

根据该定义,foo(x)x.foo() 完全一样面向对象。重要的是 x 是一个对象,也就是说,它由数据字段和一组可以用来操作它的方法组成。在这种情况下,foo 显然是这些方法之一,无论它在哪里定义,也不管调用它时使用哪种语法。

C++ 大师很久以前就意识到了这一点,并撰写了诸如 this 之类的文章.一个对象的接口(interface)不仅仅是成员方法的集合(可以用点语法调用)。它是一组可以操作对象的函数。他们是成员(member)还是 friend 并不重要。只要对象能够保持一致,它就是面向对象的,也就是说,它能够防止任意函数干扰它。

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

OOP 背后的一个关键目标是允许更多的可重用代码。

如果 new 是每个类的成员,那将意味着每个类都必须定义它自己的 new 操作。而当它是非成员时,每个类都可以重用同一个类。既然功能相同(分配内存,调用构造函数),为什么不把它放在所有类都可以重用的地方呢? (先发制人的吹毛求疵:当然,在这种情况下,同样的 new 实现也可以重用,通过从一些公共(public)基类继承,或者只是通过一点编译器魔法。但最终,为什么要费心, 当我们首先将机制放在类之外时)

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com