C++day09 学习笔记

1、类型封装
   类 --> 对象
   描述 : (1)属性
           (2)行为    ---属性和行为是属于类的
   创建对象。

2、构造函数 --- 初始化对象
   (1)构造函数名字必须与类名一样
   (2)构造函数不能写返回类型
  
   构造函数在创建对象时,系统自动调用
  
   构造函数允许重载,按用户要求,适应多种情况
   当类中一个构造函数都没有的时候,系统提供默认无参的构造函数
   但如果在类中定义了一个构造函数,系统就不提供默认的了,所以,建议,在写构造函数时,都要写一个无参的构造函数

3、对类的安全的定义
   变量 -> 私有 -> private  保护变量,防止外界随意修改,只能在类的内部使用(只能被自己的成员函数使用)
   函数 -> 公有 -> public
  
   为保证私有变量也能为外界访问,在类内部提供set,get方法
   set方法没有返回值,但要求有参数
   get方法肯定有返回值,没有参数

4、定义类的步骤
   (1)写属性的行为
          成员变量   函数
   (2)成员变量--> private
         成员函数 --> public
    (3)特殊函数
       构造函数,建议写2个。一个有参数的,一个无参的
       get,set函数,一个成员变量对应一对get,set函数,是外界访问此变量的唯一途径
            对于setXXX函数,没有返回值,有参数,参数的类型与被赋值的属性类型一致。
            对于getXXX函数,没有参数,有返回值,返回值的类型与输出的属性类型一致。
       类的行为

5、封装
   定义类的过程就是封装
  
练习:封装一个account类型
                属性:id , password ,name ,balance
                行为:save , withdraw , query
               
6、把account类拆成多文件结构
   (1)方便快速浏览整个类定义
   (2)使用方便,包含头文件即可
  
   long Account::getId(){...........}
   在函数实现时,函数前把类名加上,确定函数的所有权,避免2个类中有同名的函数,编译出错。
   " :: "称为域访问控制符。

7、Person per ;  创建了一个对象,系统调用构造函数。
   Person *p = NULL ; 声明一个类的指针,系统是不会调用构造函数的
  
   Person * p = NULL;
   p = new Person ; 在堆中申请一个类空间
   delete p;
   在堆中的数据没有名字,只能通过指针访问类对象,访问类的成员变量:
   (*p).sayHello();
   p->sayHello();
  
   Person ps[5];声明一个Person类型的数组,会调用5次构造函数
                数组在声明的时候,系统会为其分配空间
                并且在声明数组的时候,没有机会指定构造函数,只会调用无参的构造函数
               
   当一个类定义中没有无参的构造函数,但要声明一个类的数组时,可以声明一个指针数组
   Person *ps[5];  ---声明指针的时候,类对象没有创建,数组中每个元素都是Person类型的指针,达到:
   (1)不用构造函数
   (2)实现使用对象

   for(int i = 0 ; i <5 ; i++){
        ps[i] = new Person(i , 20+i);   //用循环初始化每个指针
   }
   for(int i = 0 ; i < 5 ; i++){
        delete ps[i];                   //释放指针指向的空间
        ps[i] = NULL ;
   }

8、课堂练习:
   要求:main()函数中不能写代码,在运行程序时,打印“Hello World”
   答案:全局变量的初始化操作在main函数执行之前就已经初始化了。因此,可以写一个全局变量的类,其无参构造函数写输出语句。
         然后声明一个类的全局对象。
        
9、在构造函数中,当成员变量名称和形参名称相同,避免冲突的方法:
   在每个对象内部都有一个名为this的指针,指向自己,使用自己的成员变量 this->name
  
10、析构函数
    当对象的生命周期结束,系统要回收空间,会自动被调用
    申请的所有资源(new char[20]),在析构函数中释放  
    若对象是在main函数中的变量,在main函数结束之后,才会调用析构函数
    若对象是一个函数中的局部变量,在函数返回时,调用析构函数
   
    析构函数调用 : 对象生命周期结束,系统自动调用析构函数
                    可以把释放资源的代码写在析构函数中
                   
    析构函数的写法:构造函数前加 “~”
                    不能重载,不能有参数
                   
    若不写析构函数,系统会提供默认的析构函数
   
    当类中用到了系统空间:new内存,打开文件
    就需要写析构函数,释放资源

11、作业:(1)利用面向对象的思想实现栈结构,并自己写main函数测试。

          (2)把原来的银行系统改成面向对象的形式。

原文地址:https://www.cnblogs.com/tangzhengyue/p/2622607.html