c++ 类(1)知识总结

1.定义: class 类名

        {

           private(只能被类本身函数和友元访问,系统默认私有)

           protected:(类本身函数,友元,该类的派生类成员函数访问)

           public:

           }

2.成员函数的定义:

                (1)类体内:

                          成员函数规模小,类体内定义,内联函数

(2类体外:

          在类体外定义时,用::指定成员函数属于哪个类

      格式:

         返回类型 类名::成员函数名(参数说明)

         {   函数体   }

3.struct的成员默认public

模板只能写template<class T>   不能写 template<struct T>

  4.对象:

类定义的变量叫做对象

定义:

  1.  常用!!!

2.

3.

5.类作用域中定义的数据成员不能用auto,register,extern修饰符,可以用static;

   类作用域外,通过对象名或者指向对象的指针引用类的成员。

           对象名和 . 一起使用

           指向对象的指针和 ->一起使用  或者  (*对象指针名).成员名

6.构造函数:

          在对象被创建时利用特定的初始值构造对象,把对象置于一个初始状态。

  性质:

  1. 和类有完全相同的名字
  2. 没有类型说明,没有返回值,void也不行
  3. 可以重载,一个类可以定义多个参数不同的构造函数
  4. 构造函数的参数可以在声明的参数表中给予初始值
  5. 每个类必须至少有一个构造函数,如果没有,编译器提供一个默认的构造函数(无参),不做任何初始化的工作
  6. 程序中不能直接调用构造函数,创建类的对象时自动调用
  7. 最好是public的,private构造函数不能直接初始化对象
  1. 无参构造函数
  2. 带有参数的构造函数

构造函数名(类型1 形参1.类型2 形参2)

         类名 对象名 (实参1,实参2)

  Tip:对象定义没有给实参,调用无参构造函数。给出实参,调用带参数的构造函数。

7.参数初始化表:

   对数据成员的初始化在构造函数首部完成,不是函数体内。

      Cuboid::Cuboid(int h,int w,int len):height(h),width(w),length(len)

      {    }

8.构造函数重载:

  类声明的构造函数个数没有要求,只要每个构造函数的形参表唯一

     对于任何一个对象来说,只执行一个构造函数,根据定义对象是否带参数确定指向哪一个构造函数。

9.一般把无参或者全部使用默认值参数的构造函数称为默认构造函数。

10.子对象:

          定义一个新类时,把一个已经定义的类的对象作为类的数据成员,这个类对象叫做子对象

   子对象构造函数的顺序取决于子对象成员在类中的声明顺序,与它们在成员初始化表的位置无关

   定义类的对象时,先调用各个子对象成员的构造函数,初始化相应的子对象成员,然后再执行类 的构造函数,初始化类中其他成员。

11.拷贝构造函数:

                同类对象的复制,将一个对象的静态数据成员值一一复制给另一对象的对应成员。

                如果定义了拷贝构造函数,在用一个对象初始化该类另一个对象时就会被调用。

                拷贝构造必须和类名称一样,函数的形参时本类型的一个引用变量,必须是引用。

12.拷贝构造函数被调用的三种情况:

       (1)用一个已经初始化的对象去初始化同类另一个对象

                  Sample S2(S1);

         (2)如果某函数有一个参数是类A的对象,当该函数被调用时,类A的拷贝构造被调用。

           

        (3)函数返回值是类A的对象,函数返回时,类A的拷贝构造函数被调用

13.析构函数:

            当对象脱离作用域系统自动执行。

   格式:

   要求:

          不能带任何参数,没有返回值,void也不行,最多一个析构函数,不能重载

    说明:

          1.对象数组生命周期结束时,每个元素的析构函数都会被调用

          2.析构函数在对象作为函数返回值返回后被调用,函数调用过程中临时对象生成时会有构造函数被调用,临时对象消亡导致析构函数调用

14.构造函数和析构函数的调用顺序:

      一般情况:

最先调用构造函数的,最后调用析构函数

       特殊情况:

                1.全局对象(函数体外定义),在程序开始时(包括main()函数所有函数之前)执行构造函数,程序结束或者调用exit()终止程序调用析构函数。

                2.  局部对象(函数体内定义),程序执行到定义对象的地方调用构造函数,函数结束时调用析构函数。

                3.  用static定义的静态局部对象,首次到达对象定义位置时调用构造函数,程序结束时调用析构函数。

                4.  new运算符生成的对象,创建对象的时候调用构造函数,只有用delete释放对象时才调用析构函数。如果不使用delete运算符,析构函数不会被调用。

15.对象的动态建立与释放

        ,new动态创建对象,首先为类的对象分配内存空间,然后自动调用构造函数初始化对象的数据成员,最后将该对象的起始地址返回。

16.静态成员:  

            声明为static的类成员叫做静态成员。被类的所有对象共享。

            类的静态成员包括静态数据成员和静态成员函数,可以是public,protected,private。

            不能在类体内初始化,只能在类体内声明,在类体外初始化。

            

类外初始化格式:   不能加static

数据类型名   类名::静态数据成员名=初值  

   说明:

         1.不管一个类的对象有多少个,每个静态数据成员只有一个,共享。一旦改变,所有同类对象共享修改后的值。

         2.一个类的对象空间,不包括静态成员的空间

         3.静态数据成员存储空间的分配在一开始运行分配

         4.静态数据成员的初始化语句,不属于任何类,也不属于主函数在内的任何函数

         5.如果静态数据成员没有赋初值,自动赋值0.

17.静态成员函数:

         静态成员函数属于类,没有this指针,只访问静态成员,也可以访问全局变量。

   说明:

        1.出现在类体外的不能指定关键字static

        2.静态成员函数之间可以相互访问

         3.非静态成员函数可以任意访问静态成员函数和静态数据成员

         4.静态成员函数不能直接访问非静态成员函数和非静态数据成员。

18. 类的共有静态数据成员可以用类的对象访问,也可以直接用作用域运算符::通过类名来访问。

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值