为什么班级名称和构造函数的名称相同
Why should Class names and Constructors names be the same
因此,我最近开始学习面向对象的理论的基础,并一直通过Java实践。我的问题很简单,"为什么班级名称和构造函数应该是相同的?
现在我已经阅读了这个问题 ->
为什么构造函数始终具有与课堂相同的名称以及如何调用
,即使这种响应是有道理的,降低了关键字的使用,在我看来,能够以不同于班级独立于不同的命名构造函数更有意义。现在,如果我没记错的话(通过快速的Google有点验证)语法是这样的:
className objectName = New constructorName(variables)
所以我的意思是您已经将要从中列为对象的类命名为"再次调用构造函数的同名"的意义是什么?您最好只写
className objectName = New (vars);
看到两者给出完全相同的信息。
在我看来,能够独立命名您的构造函数以了解它到底是什么,例如
thisClass thisObject = New thisConstructorMakesThis(vars)
除了上面链接中给出的响应以外,还有其他文档确切地解释了为什么构造函数和类命名相同吗?
我还注意到,响应甚至没有明确提及的考虑,动态命名的构造函数,而不是"显式语法" ,它听起来更像是绝对的构造函数名称。
编写new Identifier
时,Identifier
不是构造函数的名称,而是类的名称。它通常与变量的类相同,但并非总是如此。变量的静态类型不必与正在实例化的类相匹配。例如:
Collection<Integer> numbers = new ArrayList<Integer>();
如果您不编写类名,而是写:
className objectName = new(vars);
在可变初始化的上下文之外会发生什么?如果您有一个Inline new
调用,例如:
linkedList.next = new Node(value, null);
这里的Node
不是冗余;这是班级的唯一提及。如果您要省略Node
,编译器将如何知道要实例化的类?
至少在C 中,构造函数没有名称。需要某种语法来声明它们,并且决定使用诸如函数声明语法与类名称代替函数名称之类的内容。没有特定的原因是选择它而不是某些其他名称或某些完全不同的语法。
在任何其他情况下,类名称是指类,而不是构造函数。
Java和C#都从C 获得了许多语法,因此他们使用了相同的约定。其他语言使用其他惯例,例如python中的__init__
。
您不妨编写'className objectName = new(vars)',因为两者给出了完全相同的信息。
除了该变量并不总是对您创建的同一类的引用;这通常是对基类的引用:
base * thing = new derived;
因此,new-expression die 需要指定要创建的类型,与要称为。
的类型分开此外,这些天您通常可以避免重复班级名称:
auto p = std::make_shared<thing>(vars);
当然,C 不会强迫您的动态分配:
thing t(vars);
在我看来,能够独立命名您的构造函数以了解它到底是什么
,这将是更大的语义。
,如果您需要比声明或新表达语法允许的允许的表现力更多,则可以随时写一个命名的"工厂"函数(例如make_shared
)来创建和返回对象。
您可以具有不同命名的构造函数(尽管仍然隐藏在私有范围后面的默认构造函数。)
看单身人士...
mysingleton singleton = mysingleton.getInstance();
构造函数是一个特殊的函数,可以稳定类(创建对象),因此具有相同名称是完全合乎逻辑的。这就是C#定义的方式和其他语言。构造函数是特殊的东西。他们不能称呼它们,可以实例化。
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 为什么std::vector和std::valarray初始化构造函数不同
- 无法重新声明构造函数.为什么?
- 我打算调用initializer_list构造函数,如果存在,则事先调用复制构造函数:为什么?
- 调用自动构造函数:为什么我的类型不完整
- cpp 没有匹配的函数调用来调用构造函数.为什么
- C++构造函数初始化列表调用默认构造函数.为什么
- 未调用构造函数?为什么
- C++:自动向量重新分配调用复制构造函数?为什么
- Linux vs Windows std::map 赋值构造函数(为什么会有这样的区别?)
- 回退可变构造函数-为什么这样做
- vector构造函数——为什么是int而不是int*