• 构造函数


    class Student
    {
        private:
            int num;
            int score;
            string name;
    }

    1   简单地说,构造函数是一种函数,是当一个对象被建立时,程序为对象进行初始化而调用的函数;

    2  类的数据成员在声明时是不能初始化的, 因为类不是一个实体而是一种抽象类型,并不占存储空间,无处容纳数据,如下例是不合法的;    

    class Student
    {
        private:
            int num=123;
            int score=100;
            string name="World";
    }

    3  构造函数只有一个作用, 对对象进行初始化  (  也可以进行别的操作, 不过不常用, 也不提倡用 );

    4 构造函数不具备任何类型,因此也没有返回值, 必须与类同名, 不能自定义, 一般声明为 public;

    // 类内定义 
    class Student
    {
        public:
            Student( ){
                int num=123;
                int score=100;
                string name="World";
            }
        private:
            int num;
            int score;
            string name;
    }
    // 类外定义 
    
    class Student
    {
        public:
            Student( );
        private:
            int num;
            int score;
            string name;
    }
    Student::Student( )
    {
        int num=123;
        int score=100;
        string name="World";    
    } 

    5 在类对象进入其作用域时调用构造函数;

    6 构造函数不需要调用也不能被调用;

    7 如果缺省, 系统会自动添加一个构造函数, 没有参数, 函数体为空,不做任何操作, 如初始化等;

    8 不带参数的构造函数为默认构造函数, 对不同对象都初始化成相同初始值;

    9 带参数的构造函数, 可以实现对象不同初始值也不同;

    class Student
    {
        public:
            Student( string &st){// 一个个参数的 
                int num=123;
                int score=100;
                string name=st;
            }
            Student( int n, int s ){// 两个参数的 
                int num=n;
                int score=s;
                string name="World";
            }
            Student( int n, int s, string &st ){// 三个参数的 
                int num=n;
                int score=s;
                string name=st;
            }
        private:
            int num;
            int score;
            string name;
    }

    10 参数初始化表对数据成员初始化, 初始化不是在函数体内实现的,而是在函数首部实现;

    class Student
    {
        public:
            Student( int n, int s, string &st ): num(n), score(s), name( st){}
        private:
            int num;
            int score;
            string name;
    }

    11 构造函数的重载: 具有相同的函数名, 而参数的个数或者参数的类型不同;

    12 一个类中可以有多个构造函数, 但建立对象时, 只执行其中一个;

    13 带默认参数的构造函数 :

      1 提供建立对象的多种选择, 相当于多个重载函数;  

      2 在构造函数声明是指定默认值,而不是在定义时;

      3 声明构造函数时形参名可以省略; 

      4 如果全部参数都指定了默认值,则在定义对象时可以有一个或多个实参,甚至没有实参;

      5 全部参数都指定了默认值也是默认构造函数;  

      6 定义了全部参数都指定了默认值的构造函数,不能再重载构造函数;

     

     

  • 相关阅读:
    [LeetCode]Contains Duplicate
    C++基础之泛型算法
    KMP算法
    [LeetCode]Shortest Palindrome
    [LeetCode]House Robber
    Palindrome Linked List leetcode
    Rotate Array leetcode
    Rotate Image LeetCode
    Rotate List leetcode
    Reorder List leetcode
  • 原文地址:https://www.cnblogs.com/jian1573/p/2788944.html
Copyright © 2020-2023  润新知