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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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_Constructor - Fatal编程技术网

Oop 构造函数的使用-奇怪的疑问

Oop 构造函数的使用-奇怪的疑问,oop,constructor,Oop,Constructor,我在读关于构造器的书 当为类实例化对象时,c'TOR(如果显式编写或默认编写)是执行的起点。我的怀疑是 c'tor是否更像中的main() C 是的,我明白你的意思 可以使用设置所有默认值 克托。我也可以模仿这种行为 通过编写自定义方法。那为什么要做托尔 例如: //The code below is written in C#. public class Manipulate { public static int Main(string[] args) {

我在读关于构造器的书

当为类实例化对象时,c'TOR(如果显式编写或默认编写)是执行的起点。我的怀疑是

  • c'tor是否更像中的
    main()
    C
  • 是的,我明白你的意思 可以使用设置所有默认值 克托。我也可以模仿这种行为 通过编写自定义方法。那为什么要做托尔
例如:

//The code below is written in C#.
public class Manipulate
    {
        public static int Main(string[] args) {
            Provide provide = new Provide();
            provide.Number(8);
            provide.Square();
            Console.ReadKey();
            return 0;
        }
    }   

 public class Provide {
        uint num;
        public void Number(uint number)
        {
            num = number;
        }
        public void Square()
        {
            num *= num;
            Console.WriteLine("{0}", num);
        }
    }

我正在学习独立编程,所以我依赖于编程社区,你能给我推荐一个好的OOP资源来更好地理解我吗。如果我离题了,请原谅。

首先进行OOA&D将是一个良好的开端

您不觉得调用函数来设置类的每个成员变量有点开销吗


使用构造函数,您可以一次性初始化所有成员变量。这难道不足以让您拥有构造函数吗。

通常,您应该在构造函数中完成所有初始化。构造函数是创建类实例时首先调用的,因此您应该在此处设置默认值。

可以使用常规方法模拟构造函数和析构函数功能。然而,这两种方法的独特之处在于语言以特殊的方式对待它们

当创建或销毁对象时,会自动调用它们。这提供了一种统一的方法来处理在对象生命周期的这两个关键时期必须发生的最微妙的操作。它消除了类的最终用户忘记在适当的时间调用这些类的可能性


此外,继承等高级OO特性要求一致性才能正常工作。

首先,大多数答案至少在一定程度上取决于您使用的语言。在一种语言中意义重大的原因在其他语言中不一定有直接的类比。例如,C++中有很多临时对象自动创建的情况。ctor是作为该流程的一部分调用的,但在大多数实际情况下,不可能显式调用流程中的其他成员函数。但这并不一定适用于其他OO语言——有些语言根本不会隐式创建临时对象。

我认为一个好的学习方法是比较不同语言之间的OOP,就像从不同角度看同一幅图一样

谷歌搜索一会儿:

  • java(我更喜欢这个,它简单而完整)——
  • 蟒蛇-
  • c#-
为什么是建设者? 一个简单函数(里面也可能有函数)和一个对象之间的主要区别在于,一个对象可以被托管在一个“变量”中,而它的所有函数都在这个“变量”中,并且它也可以完全不同地对另一个“变量”作出反应,而另一个“变量”内部有相同类型的“对象”。使它们具有相同结构和不同行为的方法取决于您给类提供的参数。 下面是一个懒惰的例子:

car()现在是一个类

c1=汽车()

c2=汽车()

c1就是c2?对

c1=汽车(大众汽车)

c2=汽车(兰博基尼)

C1的功能与C2相同,但它们是完全不同类型的汽车() 变量volkswagen和Lamborgini直接传递给构造函数。 为什么是-constructor-?为什么没有其他功能?答案是:秩序


这是我最好的机会,伙计,这么晚了。希望我能有所帮助。

您不能在自定义方法中模拟构造函数,因为创建对象时不会调用自定义方法。只调用构造函数。当然,您可以在创建对象后调用自定义方法,但这不是惯例,其他使用您的对象的人将不知道如何执行此操作


构造函数只是一种约定,一旦创建对象,就可以将其作为设置对象的一种方式。

我们需要构造函数的原因之一是“封装”,代码的初始化必须是不可见的。

如果不使用构造函数,也不能强制传递变量。如果你只想实例化一个要传递int的对象,你可以将默认构造函数设置为private,并让你的构造函数接受int。这样,不接受int就不可能创建该类的对象。

子对象将在构造函数中初始化。在C++语言中,子对象存在于包含对象中(而不是通过指针或句柄连接的单独对象),构造函数是将参数传递给子对象构造函数的唯一机会。即使在Java和C#中,任何基类都是直接包含的,因此构造函数的参数必须由构造函数提供


最后,任何常量(或C#,
只读
)成员变量只能从构造函数中设置。即使是从构造函数调用的帮助函数也无法更改它们。

我的重点是,除了初始化成员变量,您还有什么其他用途。或者更像是,不用单独的方法声明进行初始化,而是使用构造函数进行初始化?这就是OOP的全部内容!这只是一个快捷方式,所以您不需要不必要地额外编写5行代码,这些代码只不过是设置程序。