Python类的构造函数是,python中类里面的init函数有什么作用

  Python类的构造函数是,python中类里面的init函数有什么作用

  先看构造函数的概念。在程序执行的过程中,当遇到对象声明语句时,程序会向操作系统要求一定的内存空间来存储新创建的对象。但是编译器不知道如何生成代码实现初始化。所以C做了一套对象初始化的机制,也就是构造函数。

  然后,在类的组合中,当创建一个类的对象时,如果这个类有嵌入对象成员,那么每个嵌入对象都会自动先被创建。按照上面的解释,空间在创建的时候就会被分配,并且会自动调用构造函数进行初始化。创建对象时,需要初始化该类的基本类型数据成员和嵌入的对象成员。先构造嵌入对象,再构造原始对象。在嵌入对象的构造中,初始化顺序基于类中嵌入对象的声明顺序,而不是基于类的初始化列表。

  复合类的构造有特殊情况,比如一些嵌入对象不在构造函数的初始化列表中,那么就会执行嵌入对象的默认构造函数。请记住,它是默认的构造函数。如果我们自己重新定义构造函数,这个默认构造函数就不存在了,但是我们定义的构造函数会被默认调用,而且这个构造函数不能带参数。

  但是,需要注意的是,有些数据成员必须在构造函数的初始化列表中进行初始化。一个是没有默认构造函数的嵌入式对象——因为这样的对象必须用参数初始化,另一个是引用类型的数据成员——因为引用变量必须在初始化时绑定被引用的对象。引用变量是带有。

  看看下面这个例子中让我困惑了很久的东西:

  在这个例子中,第一个错误是用参数定义了一个Clock的构造函数,但是Clock c是在Clockx中声明的,并被添加到了Clockx的构造函数列表中。此时编译器认为没有构造函数来初始化C,如果参数在列表中,那么就意味着C要通过外部构造的对象来复制构造自己。如主函数中的时钟C(“AAA”);构造了一个C,然后把C传入Clockx cx(c),Clockx中的C被初始化。Clockx中的c和main中的c有不同的作用域。所以用的时候一定是cx.c.showTime()。

  再看另一个错误:

  这里在Clockxd中声明了Clockd c,但是没有定义带初始化列表的构造函数。然后系统会默认调用默认构造函数Clockd,这个默认构造函数被替换为ClockD (const.),所以系统报错。因此,需要添加一个名为Clocked(){ };默认情况下,不带参数的构造函数可以由Clockxd构造。

  以上几点是《C++语言程序设计》中的知识。很长一段时间在编程上很迷茫。看来基本功很重要。src/clock.cpp示例可以重现。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: