请给我一个合乎逻辑的答案,命名类和构造函数具有相同的名称。为什么我们不能为构造函数选择除类名之外的其他名称?Java中的构造函数名称和类名称相同。为什么?
class Temp
{
Temp()
{
}
};
请给我一个合乎逻辑的答案,命名类和构造函数具有相同的名称。为什么我们不能为构造函数选择除类名之外的其他名称?Java中的构造函数名称和类名称相同。为什么?
class Temp
{
Temp()
{
}
};
构造函数名与类名相同只是一个约定。逻辑一太 - 考虑对象可以构造这样也
Temp t = Temp();
它可能已被称为constructor()
但当时如果你正在寻找的只是片断你不知道它是什么构造?
+1,如果你可以写'Temp t = SomeOtherName()'但仍然意味着Temp –
那么这个语法可能会是'Temp t = Temp :: foobar();'或其他。 – fredoverflow
因为此语法不需要任何新的关键字。除此之外,没有什么好的理由。
为了尽量减少新的关键字数量,我没有用明确的语法如下:
class X { constructor(); destructor(); }
相反,我选择了镜像构造的使用声明的语法。
class X { X(); ~X();
这可能过于聪明。 [设计与进化的C++,3.11.2构造符号]
根据其定义了C++语言,构造不具有名称,至少不会在标识符的意义上的标准,其通过声明宣布(声明者编号)。它是一种用特定语法声明的匿名函数,并且只在特定情况下通过更特殊的语法才被引用。在其他情况下,相同术语Temp::Temp
指的是class Temp
本身。
该构造函数使用名为注入类名称的成员声明进行声明。可以使用::
标点符号(嵌套名称说明符)使用的注入类名称或其他类型名称以type::type
的形式进行引用,最后两个::
-限定的部分具有相同的标记,特定的上下文,如委托和继承构造函数。
所有这一切的原因是,您不能对构造函数进行引用,例如获取指向它的函数指针或者在不创建新对象的情况下调用它。构造函数与对象的生命周期有着内在的联系。
从历史上看,构造函数从工厂函数发展而来,它返回给定类型的初始化对象。这种模式,其中函数名可能是别名类型和构造函数,仅仅是约定,在某些语言中仍然可以看到。当前的语法是从您在JavaScript中看到的内容演变而来的。一些早期的C++编译器(思考C,不确定Cfront的最早版本)并没有将构造函数视为成员。
您可以参考该文章 http:// stackoverflow。com/questions/3401444/methods-with-same-name-as-constructor-why – Dipika
第一个dup不是特定于语言的,第二个是针对Java的。这个问题值得一个很好的,单独的答案。 – Potatoswatter
@Patatoswatter:第一个dup不是语言特定的,但接受的答案引用了Stroustrup对其推理的解释。 –