构造函数

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 定义了全部参数都指定了默认值的构造函数,不能再重载构造函数;

 

 

原文地址:https://www.cnblogs.com/jian1573/p/2788944.html