C++ - 构造函数

1、名字空间程序员

  一、名字空间的由来:因为全局空间(即全局变量)用起来很是的方便,但若是过多的在全局空间定义变量,有很大的可能会引发重名。所以,C++就引入了名字空间的概念。数组

  二、名字空间的含义:名字空间就是为了给程序员更好的管理变量,所以C++可将全局空间分红一个个独立空间,并给每一个独立空间取不一样的名字。这样就能很大程度的保证,同一个名字空间的名字不重名,以防止冲突。函数

  三、若是两个名字空间取相同的名字,那么这两个名字空间就会被合并成一个名字空间,所以在给名字空间取名字的时候要当心些。spa

  四、名字空间不只能够定义变量,还能够声明函数,不过函数的定义要在名字空间外指针

  五、使用域限制符(::)能够直接访问名字空间的内容。 例如,名字空间::标示符,不过会有些麻烦。对象

      不过可使用using   namespace  名字空间;不过不建议使用在本身定义的名字空间,以避免发生变量、函数、类等的冲突。blog

  六、注意:不一样的命名空间下的相同名字是不会构成重载的,相同做用域下的相同名字才会构成重载。生命周期

2、类(class) 注:类就是class,class就是累资源

  一、C++中的class其实与C++中的struct结构体区别不大,但为了区分C++与C,通常在C++中都使用class作用域

  二、C++中class与struct的一些区别在于,struct结构体中成员默认访问属性的是public公开的,而class类中成员默认访问属性的是private私有的。

3、class的构造函数

  一、在建立对象时自动调用的函数,在整个生命周期必定且只能调用一次。

  二、在构造函数中负责对成员变量进行初始化、分配资源、设置对象的初始状态。

  三、构造函数能够有多个版本,不一样的构造函数之间不会构成重载,编译器经过创造对象的方式和参数的设置来断定选择哪一个重载函数。

  四、若是没有定义构造函数,编译器会自动生成一个构造函数。若自定义构造函数,编译器则不会生成构造函数

  五、通常来讲,编译器自动生成的构造函数都是够用的,除非有成员是指针,指向额外的空间,这时候就须要自定义构造函数了

  六、通常状况下,构造函数的有4个版本:a、无参构造函数  b、有参构造函数  c、拷贝构造函数  d、赋值构造函数  e、转换构造函数

4、无参构造函数与有参构造函数

  一、无参构造函数指的是在建立类时,没有参数传递。有参构造函数指的是在建立类时,有参数值传递。

  二、一旦构造了一个构造函数,编译器就不会产生无参函数,因此在编辑时,最好多写一个无参构造函数,以防止建立对象出错。

  三、在自定义有参构造函数时能够默认参数,所以有能够在建立类时没有参数传递给构建函数,所以有能够出现冲突。(编译器不知道选择调用无参函数仍是有参函数)。

         

  四、有参构造的调用:

       a、直接调用,建立类时不给参数;例如   Student   stu  =  new  Student;

       b、建立数组对象时,每一个对象都会调用一次无参构造

       c、若是累A中有类B,那么在执行类A时,执行到类B的建立时,会自动调用无参构造

       d、在类A中调用类B的有参构造:类A(参数列表):类B(参数列表)

5、拷贝构造函数

  一、拷贝构造函数是一种特殊的构造函数,就是以一种已有的对象去构造同类的副本对象,跟克隆同样。

    

  二、自定义拷贝构造函数:

      a、申请所需的空间

      b、拷贝赋值

  三、拷贝构造函数的调用:

      a、对象与对象赋值

      b、用对象与函数的传参

      c、用对象当作返回值

      d、类A中有类B时,类A在执行拷贝构造函数时,会自动调用类B的拷贝构造函数

6、赋值构造函数  

  一、赋值构造就是给一个已经建立过的对象赋值上另外一个已经建立过的对象。

    

  二、自定义赋值构造函数的步骤:a、肯定赋值构造函数的类型  

                  b、防止自赋值

                  c、释放旧资源

                  d、调用拷贝构造函数或者直接写拷贝函数的步骤

  三、赋值构造与拷贝构造的区别:

      赋值构造函数:对象A与对象B都已生成;B = A

      拷贝构造函数:使用已有的对象A去创造对象B(调用时的对象B还未生成)

6、转换构造函数

  一、用一个数据给对象初始化,默认会自动调用构造函数,达到类型转换效果。

  二、编译器默认会实现自动类型转换构造函数。

相关文章
相关标签/搜索