ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ - 类中默认成员函数

2022-01-17 23:00:03  阅读:177  来源: 互联网

标签:int 默认 month C++ Date 拷贝 day 类中 构造函数


目录

一、默认构造函数

二、析构函数

三、拷贝构造函数

四、赋值运算符重载

五、取地址及const取地址操作符重载


一、默认构造函数

 

        构造函数名字与类名相同,并且没有返回值。创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。

class Date
{
public :
    // 1.无参构造函数
    Date ()
    {}
    // 2.带参构造函数
    Date (int year, int month , int day )
    {
        _year = year ;
        _month = month ;
        _day = day ;
    }
private :
    int _year ;
    int _month ;
    int _day ;
};

        构造函数的任务不是开辟空间而是将对象初始化。怎么初始化可以自己在函数中设置,也可以不写构造函数,这时系统会自动生成一个默认的构造函数,该函数对类的内置类型属性不处理,对自定义类的属性会调用该属性的构造函数。

class A
{}
class Date
{    
private:
    //内置类型
    int _year;
    int _month;
    int _day;
    //自定义类型
    A a;
};

二、析构函数

        析构函数相对应构造函数,在对象生命周期结束之前调用一次析构函数,对该对象内部一些资源进行清理。

~Date()
{}

        其结构类型与构造函数相同,函数名是在类名前面加一个~,同样没有返回值。类中没有定义析构函数,系统会生成默认析构函数。该函数不会对内置类型属性处理,但若是有自定义类型属性,其会调用自定义类型属性的析构函数。

三、拷贝构造函数

        上边的构造函数使用成员属性类型的参数作为构造函数来初始化对象,当我们使用相同类型的类作为参数,这时候就称之为拷贝构造函数。

Date ( Date& d )
{
    _year = d.year ;
    _month = d.month ;
    _day = d.day ;
}

       同样的我们不写拷贝构造函数,系统也会自动生成一个默认拷贝构造函数,但需要注意该函数只是按字节序的值进行浅拷贝。  

        拷贝构造函数中的参数要带引用。因为对象传参时要调用拷贝构造函数,如果不使用引用那么就会陷入要传参就要就行拷贝构造,要拷贝构造就要先传参,这样的无限递归循环。

四、赋值运算符重载

        赋值运算符类似拷贝构造,我们可以将赋值运算符如下进行重载,也可以使用系统默认的赋值运算符,与默认拷贝构造相同也只是浅拷贝。

Date& operator=(const Date& d)
{
    if(this != &d)
    {
        _year = d._year;
        _month = d._month;
        _day = d._day;
    }
}

        默认的赋值运算符与默认拷贝构造的主要区别就是,拷贝构造函数时将生成的对象拷贝给要创建的对象,而赋值针对的两个对象都是已经创建好的。

//拷贝构造
Date d1 = d2;
Date d1(d2);

//赋值
d1 = d2;

五、取地址及const取地址操作符重载

        该操作符的重载也是如果我们不定义的话系统会自动生成。由于并不会有特别的需要,我们一般对取地址符不会去重载,就按照系统的默认重载来使用就行了。

Date* operator&()
{
    return this ;
}
const Date* operator&()const
{
    return this ;
}

标签:int,默认,month,C++,Date,拷贝,day,类中,构造函数
来源: https://blog.csdn.net/xd6905/article/details/122549220

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有