zoukankan      html  css  js  c++  java
  • 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)把原来的银行系统改成面向对象的形式。

  • 相关阅读:
    C语言volatile关键字的用法
    UDP广播包
    进程和线程的区别
    Unix/Linux进程间通信
    虚拟空间,malloc
    自我介绍
    java初始化顺序
    java 队列基础操作
    java IO基础操作
    Python中的Tab补全功能添加
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/2622607.html
Copyright © 2011-2022 走看看