Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 构造函数是例程吗?_Oop - Fatal编程技术网

Oop 构造函数是例程吗?

Oop 构造函数是例程吗?,oop,Oop,目前,我们正在写一篇关于为一门学术性的面向对象微型编程语言实现编译器的学士论文 我们希望在文档中做到精确,我们目前正在讨论构造函数是否是一个例程 我们想指出的是,构造函数是一个例程,它有一块命令、参数和局部变量。尽管缺少名称,但其他例程的所有其他属性都已给出 我们认为构造函数不是例程的原因是每个实例只能调用一次 我们不确定这个问题是否有明确的答案,或者不同理论的定义是否不同 如果有人能提供一些关于这个语义问题的文献,我们会很高兴 最好的 编辑:关于我们如何用我们的语言命名特定事物的一些信息:

目前,我们正在写一篇关于为一门学术性的面向对象微型编程语言实现编译器的学士论文

我们希望在文档中做到精确,我们目前正在讨论构造函数是否是一个例程

我们想指出的是,构造函数是一个例程,它有一块命令、参数和局部变量。尽管缺少名称,但其他例程的所有其他属性都已给出

我们认为构造函数不是例程的原因是每个实例只能调用一次

我们不确定这个问题是否有明确的答案,或者不同理论的定义是否不同

如果有人能提供一些关于这个语义问题的文献,我们会很高兴

最好的

编辑:关于我们如何用我们的语言命名特定事物的一些信息:

  • 我们有职能和程序。函数确实有返回值,而过程没有
  • 构造函数就像一个未命名的过程(没有显式的返回值)
  • 构造函数被称为隐式的、类似java的:
    x:=new x(1,new Y())
  • 参数是在构造函数的定义过程中定义的。自身实例(
    )不被视为参数,而是隐式提供的
感谢您迄今为止的回答,他们正在帮助您完成Through过程。

只有在您创建该类的新实例时,编译器才会执行构造函数(如名称所示)


一般的想法是这样的:您放置了一些应该在启动期间执行的操作集,这就是在构造函数上所做的。这意味着,您不能像调用类的其他方法一样调用构造函数。

构造函数是构造函数

它可能类似于一个函数(返回值:新对象)、过程(例程、无返回值的函数、对未初始化对象调用的函数),它可以在对象上调用一次或多次(尽管以后无论对象是否具有相同的标识,它都是有争议的),它可能有名称,也可能没有名称,或者名称可能被强制与类匹配,等等。构造函数甚至可能“不存在”,或者由编译器从各种分散的初始值设定项和代码块隐式创建,否则将是表达式/例程/whatchamacallit

这完全取决于您编译的语言以及“函数”、“例程”甚至“参数”的含义(即“这”是参数吗?)


如果你想问这样的问题,首先描述/定义你的语言和你想使用的所有术语(什么是类?方法?函数?例程?参数?构造函数?…),然后,很可能你会自动推断出与你的本体相匹配的答案。

这取决于语言——对于这种学术语言——我不会说构造函数是一种例行程序。我这么说是因为在不说它是一个例程时,保持了一种分离:除非该语言明确地统一了例程/函数/构造函数,否则不要说它是:)

现在,考虑这些反例(还有很多,我敢肯定):

  • 像Eiffel这样的语言允许为构造函数指定不同的名称(我认为这非常棒,而且wish被更多地使用)
  • 像Ruby这样的语言没有“new”操作符,调用构造函数就像调用任何(类)方法一样。Ruby甚至没有一种方法来表示一个方法充当构造函数(或者工厂方法)
  • JavaScript等语言中的构造函数只是一些函数,当与
    new
    一起使用时,它们可以在特殊的上下文中运行
此外,在某种程度上,可以认为多次调用构造函数(你得到一个新的对象-那又怎样?)与多次调用函数(你可能得到相同的值)没有什么区别。考虑新对象可能是不可变的,并且可以与其他对象具有相等的值。 也就是说,考虑到下面的代码,是否使用了构造函数

5 4 vec2 "1" int 2 vec2 add puts
这是我编的,但我希望它能说明问题。根据特定语言如何看待构造函数的角色(甚至需要),构造函数与普通函数之间可能存在也可能不存在构造函数或外部差异


现在,编写合适的语言规范,并尽量避免泄露实现细节。

构造函数是一个具有特殊语义的函数(例如,它在特定上下文中被调用-作为对象构造的一部分),但无论如何,它是一个函数-它可以有参数,它有通常的控制流,它可以有局部变量等。它不比任何其他函数好或坏。我会说它是一个例程。

我认为
例程
是调用方在构造的对象/类上需要时可以显式调用的,而
构造函数
可以被称为一种特殊类型的例程,在请求类实例时在运行时调用

  • 构造函数只在构造和初始化类时起作用 对象及其变量
  • 它可以接受参数,也可以不接受参数,它可以重载 不同的参数集
  • 如果构造函数没有参数,并且其代码中也没有代码 块,则可能要忽略它
  • 某些语言会自动创建默认参数 构造函数(如C#),如果您不提供自己的构造函数
  • 构造函数可以使用访问修饰符来限制创建 课程范围
  • 构造函数不能具有返回类型,因为其构造 声明它的同一个类,显然没有意义 返回相同的类型(这可能是某些语言使用与类名相同的构造函数名的原因)
  • 所有实施