C++ -- 类与成员

一、初始化列表

  1、是构造函数中一种成员的初始化方式

    例如,class    类名

     {

        类名(参数列表):成员1(成员1),成员2(成员2)...

        {   }

      } 

  2、用此方法可以解决类中的成员与构造函数中参数的重名问题,并且初始化参数列表是在构造函数块之前执行,因此优先级跟高一些

  3、如果初始化的是类,就是需要将类中所需要B的参数传递给类B中。

  例如,class   A

      {

        A(int  a,int  b  ....):B(a,b)...

      }

  4、如果类成员中用const 锁定,绝大多数下,必须使用初始化参数列表给参数赋值。

  5、类成员的执行顺序与在类中定义的顺序有关,而与他初始化的顺序无关。

二、this 指针

  1、如果形参设置成语类成员的名字一样,就会让编译器无法辨认这两个分别是谁。因此,编译器给对象添加了一个看不到的指针(this),这样就有分别了。

  2、this指针在整个类中都一致存在,不过编译器默认为是隐藏的,不过程序员也可以手动调用

  3、使用this指针的优点:

             a、区别变量与成员

             b、返回this指针链式调用

三、常对象、常函数、常变量

  1、常对象是在创建对象时添加一个const关键字,这个对象就不能修改了,也意味着整个对象不能修改。

  2、常函数就是在成员函数体前加const关键字,常函数就相当于在在this指针前加了const属性,

  3、常对象能调用带有const属性的成员(常函数),而不能调用普通成员。

  4、常函数与‘非’常函数,虽然只相差了一个关键字const,但不会造成冲突,会形成重载。原因在于第二点的解释,const是加给this指针的,不是加给函数的

  5、如果有成员被加了const,但确实要被修改,这时候可以给成员名前加一个mutable关键字

  6、常变量就是,类中成员变量前添加了const关键字,一旦加了此关键字,就不能被修改了,并且只用一种方式才能给他进行初始化,就是在初始化列表中给他赋初值。

四、静态变量与静态函数

  1、静态变量只能在类外定义,并且在类中声明才能调用。

  2、静态变量如果在类中定义会存储在bss段(这段空间在编译器进行编译最开始就已经固定大小),因此如果多次创建对象时,就不能给创建出静态变量合适的存储空间,这时就会出错。

  全局段: 类型     类名::成员名(就是名字)

  类中声明: static   类型    成员;

  3、静态就是声明在类中的全局变量,在任意位置都可以使用类名::静态成员名进行访问

  4、静态成员函数,就是在函数名前加上static关键字进行修饰,所有对象共享一份静态成员函数

  5、静态成员函数不需要this指针,也就不会访问静态变量。

  

五、析构函数

  1、析构函数会在对象被销毁时自动调用,在整个函数周期只执行一次,并且只有一个析构函数,他是对象被销毁的最后一个动作。

    class   类名

    {

      ~类名(void){  }

    }

  2、~类名这样就构成了析构函数,一般没有参数,所以直接填void就可以

  3、编译器会默认析构函数,不过如果程序员自定义后,默认析构函数就不会产生

  4、析构函数的调用顺序与销毁函数相反

  5、自定义析构函数的优点:有时候有一些析构函数看不见的资源,例如new/delete等,如果在构造函数时,自定义生成new,那么系统默认的析构函数是不会再析构函数时销毁new生成的空间的,这时候就需要自定义析构函数进行销毁,还有文件的读写、数据的保存等。

原文地址:https://www.cnblogs.com/goul/p/9445510.html