c++,类,构造函数和析构函数。他们到底有多少细节?

新的一年,大家新年快乐!!

构造函数:

1、定义

不论是构造函数还是析构函数都是可以在类内或者类外定义:如下

类内:

class A{
    private:
        略
    public:
        A(){...这里就省略了}//这个便是构造函数的定义方式
        ~A(){同上}//相比构造函数,为了区分析构函数,前面加一个小波浪
}

类外:

class A{
    private:
        略
    public:
        A();
        ~A();
}

A::A(形参){
    函数体
}
A::~A(形参){
    函数体
}

1、构造函数名必须和类名一样

2、构造函数没有返回值,相比之下析构函数既没有返回值,也没有参数,故不能重载

3、可以重载,但析构函数不能重载

4、如果没写构造函数,系统会自动生成一个构造函数,但这个构造函数并不会有任何实质的影响只是生成一个而已,并没有用,所以我们最好还是自己写上

5、定义对象的时候,系统会自动调用构造函数,通过构造函数来构造对象,一样当一个变量生命周期结束的时候,会自动调用析构函数

6、一般都会把构造函数弄成公有但是析构函数只能是公有

构造函数,既可以在传入的参数中来初始化值,也可以在函数体中来赋值。

总结:构造函数可以写参数也可以不写参数,参数属于我们在构造变量的时候需要传入的参数。

比如:

class Date
{
private:
   int year;    //年
   int month;//月
   int day;     //日
public:
   Date(int y, int m, int d); //构造函数
   void Output(); //输出函数
};

Date::Date(int y, int m, int d) //定义构造函数
{
   year = y;
   month = m;
   day = d;
}

int main(){
    Date a(2024,1,1);
}

当然同样也可以不写参数,那么在Date a的时候,就不需要后面那个小括号了

当然,在定义的时候,我们直接给传参赋值例如:

class Date
{
private:
   int year;    //年
   int month;//月
   int day;     //日
public:
   Date(int y, int m, int d); //构造函数
   void Output(); //输出函数
};

Date::Date(int y, int m=10, int d=20) //定义构造函数
{
   year = y;
   month = m;
   day = d;
}

这样也是可以的。不过在写默认参数一定要注意防止重定义!!!

构造函数重载(析构没有重载)

之所以重载是因为这样可以提供用户不同的初始化,这些函数名字一样,参数列表不同

同样的代码,如下:

class Date
{
private:
   int year;    //年
   int month;//月
   int day;     //日
public:
   Date(int y, int m, int d); //构造函数
   Date(int y)//重载
   {
       year = y;
       month = 1;
       day = 1;
   }
   void Output(); //输出函数
};

Date::Date(int y, int m, int d) //定义构造函数
{
   year = y;
   month = m;
   day = d;
}

最后

构造函数的初始化列表

//构造函数的初始化列表(推荐使用)
Date::Date(int y, int m, int d):year(y),month(m),day(d){}




//相等与下面




//构造函数
Date::Date(int y, int m, int d)
{
   year = y;
   month = m;
   day = d;
}

上下二者是一模一样的,记得初始化列表的后面{}里面,依旧可以写入语句,只不过先执行了初始化列表,继续执行括号里面的。


每日金句:

        在你走向那个人的路上,也许会有更多困难,但只要你坚信这条路通往正确,一切就有意义。 祝各位新的一年,步步高升!

                                                                                                                        ————雀儿

c++,类,构造函数和析构函数。他们到底有多少细节?_第1张图片

你可能感兴趣的:(c++专区,c++,开发语言,学习)