今天我的朋友问我,为什么我们真的需要C ++中的构造函数? 在结构语言中我们可以做同样的事情。 构造函数的特性是什么,向我展示构造函数的需要,以便我在C ++程序中使用它。 请帮助我,给我一些例子,以便我能够清除他的怀疑。
答案 0 :(得分:10)
你没有需要构造函数,就像你不需要需要流行语言的大部分功能一样。
存在构造函数使得错误的事情变得更加困难。在这种情况下,使用尚未初始化的数据。
答案 1 :(得分:3)
一个病态的答案是构造函数不会改变语言的图灵完整性,因此,从严格意义上讲,您不需要它们,因为您不需要该语言的许多功能。但这是正式的而不是实际的。你会因为没有在晚上感到温暖而只考虑理论而感到宽容。
构造函数有用的一个很好的实际例子是考虑RAII模式。通过使用构造函数,您可以非常好地将初始化和获取封装在您具有破坏的相同位置。 C,没有构造函数,因程序员忘记了该过程中的一个步骤而闻名。
答案 2 :(得分:3)
正如其他人已经回答的那样,你使用构造函数的方式与在过程语言中使用init函数的方式相同,但是由于构造函数,程序员无法忘记调用init函数 - 编译器会这样做为了他。除了自动调用它之外,它给出的另一个好处是优雅地解决继承初始化问题:如果类A扩展了扩展类C的类B,则可以保证所有将调用三个构造函数(对于类A,B和C),并且将以正确的顺序调用它们(类C,然后是类B,然后是类A),以便每个构造函数都可以使用来自超类的所有数据(因为它已经初始化了)。对于没有构造函数的语言,程序员需要处理所有这些簿记。
答案 3 :(得分:0)
在过程语言中,您还需要将变量初始化为定义良好的值。通常具有某种Init
功能。构造函数是一种确保在创建对象时将其初始化为有效状态的方法。
在.net中,您可以绕过构造函数(使用特权代码),并且您将获得其字段初始化为0的对象。
答案 4 :(得分:0)
这就是面向对象语言的工作方式。在C中,您将使用malloc分配内存,然后以某种方式初始化该内存。在C ++中,构造函数可以完成这两件事。通过将这两个东西放在一起,这使得开发人员更难分配内存并且失败/忘记初始化它。
答案 5 :(得分:0)
因为某些对象需要初始化数据。使用构造函数,您可以在编译时确保对象获取数据。否则编译器会抛出错误。
答案 6 :(得分:0)
不可变对象。
当您使用并行或并发编程时,共享无法更改的对象要容易得多。您不必担心竞争条件,锁等。但是,在大多数OOP语言中创建不可变对象的唯一方法是通过构造函数。您无法在对象上设置属性,因为根据定义,所有属性都是只读的。