赋予构造函数名称的意义何在

时间:2012-06-05 04:52:48

标签: java c++ constructor abstraction

我已经使用C ++和Java几年了。我似乎无法理解的一件事是,为什么我们需要为类的构造函数提供名称?例如,如果我必须在C ++ / Java中定义类FOO,我将被迫提供FOO作为构造函数名称。但是,由于构造函数从未被显式调用,编译器的意义在于强迫我为它提供一个名称。

抽象范式决定了,我们隐藏了程序员不必要的细节。这就是原因,构造函数没有返回类型,因为它已经很好地定义了构造函数必须返回的内容。本着同样的精神,为什么我们不能只为所有类的构造函数赋予通用名称 - 例如任何有意义的东西,如initialize()或者只是没有,只是参数( [arg [,arg]] )

我希望,我能够表达自己。如果有人有任何确定的答案,请告诉我。

8 个答案:

答案 0 :(得分:3)

在C ++构造函数中没有名称(C ++ 03 12.1),但是由于构造函数基本上被定义为函数,因此以某种方式命名它们是合乎逻辑的。
将它们命名为除类名之外的任何内容都会添加新的关键字,因此最终它们的名称与类名相同 简而言之,这是一个合乎逻辑的决定,它避免了新的关键词,同时确保了直观性。

答案 1 :(得分:2)

从C ++标准(12.1)(强调我的):

  

构造函数具有名称。使用特殊的声明符语法   声明或定义构造函数。语法使用:

     
      
  • 一个可选的decl-specifier-seq,其中每个decl-specifier都是一个函数说明符或constexpr,
  •   
  • 构造函数的类名和
  •   
  • 参数列表
  •   

在C ++中,您没有提供名称,您正在编写由语言创建者决定声明构造函数的特殊语法。

答案 2 :(得分:1)

它是该语言的标准,如果您想为构造函数创建一个通用名称,那么尝试学习另一种语言或者创建自己的语言。 = P

答案 3 :(得分:1)

对于Java和C ++,构造函数名称必须与类名相同。此外,您知道它是构造函数,因为它不声明返回类型。这种声明构造函数的方法可以帮助您声明名称为__init__initialize__constructor的方法。例如,这在Python中是不可能的,因为它使用__init__作为构造函数名称。

答案 4 :(得分:0)

构造函数是特殊的成员函数,构造函数总是返回'new'运算符创建的内存地址。由于一个函数一次只返回一个函数,因此没有其他值可以从构造函数返回。    定义与类名相同的构造函数名称是java标准。

答案 5 :(得分:0)

首先,您不必编写构造函数。 如果你不写一个 - 编译器将为你创建一个默认的构造函数。

第二个,有时您必须使用一个(例如,如果您有最终的类变量,则必须在创建对象时初始化它们)。在这种情况下,您必须编写构造函数,并在实例化对象时使用它。

public class Foo {
    final int a;

    public Foo (int val){
        this.a = val
    }
}

Foo foo = new Foo (23);

答案 6 :(得分:0)

你的想法是正确的。 Java采用的语法只是一个历史工件。

在支持OOP的较新语言中,通常不存在此冗余。 Scala称之为this *,F#称之为new *,Python称之为__init__,Ruby称之为initialize等。


无论如何,

*辅助构造函数。这些语言中的主要构造函数本身就是类参数。

答案 7 :(得分:-2)

因为你不能明确地调用构造函数,给它一个特殊名称的目的是什么?关于具有与类相同名称的构造函数:构造只能在函数中执行,因此构造函数是一个函数。因为它是一个特殊的功能,在其他类功能中它应该有一个特殊的签名。语言设计师希望他们的名字与班级相同。