使用构造函数 - 奇怪的怀疑

时间:2010-06-25 03:52:30

标签: oop constructor

我正在阅读构造函数,

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

  • 更像是main() C
  • 是的,我理解你的观点 可以使用设置所有默认值 c'tor。我也可以模仿这种行为 通过编写自定义方法。那为什么一个c'tor?

示例:

//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资源,以便更好地理解。如果我不在话题,请原谅。

9 个答案:

答案 0 :(得分:3)

Head First OOA& D将是一个良好的开端。

你不觉得调用一个函数来设置你的类的每个成员变量都有点开销。

使用构造函数,您可以一次初始化所有成员变量。这个理由不足以让你拥有构造函数。

答案 1 :(得分:2)

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

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

此外,先进的OO功能(如继承)要求均匀性均匀工作。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

通常,您应该在构造函数中进行所有初始化。构造函数是在创建类的实例时调用的第一个函数,因此您应该在此处设置任何默认值。

答案 4 :(得分:1)

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

谷歌搜索一下:

为什么是施工人员? 一个简单的函数(也可能包含函数)和一个Object之间的主要区别是,对象可以在“变量”中托管,其中所有函数都在内部,并且也可以完全不同于另一个函数。内部使用相同类型的“对象”的“变量”。使它们具有相同结构且具有不同行为的方式取决于您给予该类的参数。 所以这是一个懒惰的例子:

car()现在是一个班级。

c1 = car()

c2 = car()

¿c1正好是c2?是。

c1 =汽车(大众汽车)

c2 = car(lamborghini)

C1具有与C2相同的功能,但它们是完全不同的汽车() 变量volkswagen和lamborghini直接传递给构造函数。 为什么 - 构造函数 - ?为什么没有任何其他功能?答案是:订单。

这是我最好的一击,伙计,这个晚了。我希望我能以某种方式帮助过。

答案 5 :(得分:1)

您无法在自定义方法中模拟构造函数,因为在创建对象时不会调用自定义方法。只调用构造函数。当然,您可以在创建对象后调用自定义方法,但这不是惯例,而使用您的对象的其他人也不会知道这样做。

构造函数只是一种约定,作为在创建对象后设置对象的方法。

答案 6 :(得分:0)

我们需要构造函数的原因之一是'封装',代码执行某些初始化必须是不可见的

答案 7 :(得分:0)

如果不使用构造函数,也无法强制传递变量。如果你只想要一个对象来实例化一个对象,你可以将默认构造函数设置为private,并使你的构造函数取一个int。这样,在不使用int的情况下创建该类的对象是不可能的。

答案 8 :(得分:0)

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

最后,任何常量(或在C#,readonly)成员变量只能从构造函数中设置。甚至从构造函数调用的辅助函数也无法更改它们。