美文网首页
C++ tip5 构造函数和析构函数

C++ tip5 构造函数和析构函数

作者: Laughingg | 来源:发表于2016-06-14 23:39 被阅读26次

    构造函数: 在对象实例化的时候被自动调用。

    构造函数与类同名
    构造函数没有返回值。
    构造函数可以进行重载。
    实例化对象时仅用到一个构造函数。
    用户没有定义构造函数时候,系统会创建一个默认的。

    定义构造函数:

    class Student {
        public: 
            // 无参数
              Student(){
              m_strName = "xiaosan";  
        }
    
            // 有参数
            Student(string name){
              m_strName = name;  
        }
        private:
            string m_strName;
    }
    
    对象初始化
    Student t1;
    Student t2("shabi");
    

    注意点:

    Student(){
        m_strName = "xiaosan";  
    }
     Student(string name = "sss"){
        m_strName = name; 
    }  
    
    当要调用的时候,如果需要使用默认值。
    Student t1();
    Student t2();
    
    这样调用时有冲突的。
    

    构造函数初始化列表

    默认构造函数:在创建对象不需要传参数的构造函数。
    class Student {
          public: 
          Student(){}
          Student(string name = "jim")
          // 上面两个是一样的
    }
    
    class Student {
      public: 
          // 这里使用的是函数的初始化列表
          /*
            使用初始化列表先于构造函数执行。
            使用初始化列表可以给 常量赋值。
            初始化列表只能用于构造函数。可以同时初始化多个值。
          */
          Student(): m_strMame("jim"), m_iAge(10){}
          Student(string name = "jim")
          // 上面两个是一样的
      private:
          string m_strName;
          int m_iAge;
    }
    

    拷贝构造函数

    class Student {
          public: 
          Student(){
          m_strName = "ssss"
      }
          // 拷贝构造函数
          // 格式: 类名(const 类名 & 变量名)
          Student( const Student& stu){
    }
    
          private:
            string m_strName;
          
          // 上面两个是一样的
    }
    
    
    
    Student stu1;
    Student stu2 = stu1;
    Student stu3(stu1);
    
    初始化了三次,但是构造函数就调用了一次。
    stu2 和 stu3 的初始化是使用 拷贝构造函数来实现的
    
    注意: 当采用赋值初始化,和使用对象进行初始化的时候使用的是。拷贝构造函数。
    

    析构函数
    归还使用的系统资源

    // 这就是一个析构函数
    // 没有参数,也没有重载的概念
    ~类名(){
    
    }
    

    相关文章

      网友评论

          本文标题:C++ tip5 构造函数和析构函数

          本文链接:https://www.haomeiwen.com/subject/gciudttx.html