0
点赞
收藏
分享

微信扫一扫

C++函数对象包装器function类详解

源码之路 2024-02-27 阅读 12

目录

1.类的6个默认成员函数

 2. 构造函数

2.1 概念

 2.2 特性

 3.析构函数

 3.1 概念

 3.2 特性

4. 拷贝构造函数

4.1 概念

 4.2 特征

 5.赋值运算符重载

5.1 运算符重载

 5.2 赋值运算符重载

 2. 赋值运算符只能重载成类的成员函数不能重载成全局函数

 3. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。注 意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符 重载完成赋值。


1.类的6个默认成员函数

 2. 构造函数

2.1 概念

对于以下Date类:

class Date
{
public:
    void Init(int year, int month, int day)
    {
        _year = year;
        _month = month;
        _day = day;
    }
    void Print()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }
private:
    int _year;
    int _month;
    int _day;
};
int main()
{
    Date d1;
    d1.Init(2022, 7, 5);
    d1.Print();
    Date d2;
    d2.Init(2022, 7, 6);
    d2.Print();
    return 0;
}

 用Init初始化容易忘记初始化定义后直接push

 2.2 特性

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。

他是一个特殊的成员函数不能以普通函数来对待他,所以比较复杂。

 3.析构函数

 3.1 概念

通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?

 3.2 特性

局部变量后定义先销毁,静态变量最后销毁,s3虽然是局部的但是生命周期是全局的因为他在静态区

 

 

4. 拷贝构造函数

4.1 概念

在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎。

 4.2 特征

 5.赋值运算符重载

5.1 运算符重载

 5.2 赋值运算符重载

 2. 赋值运算符只能重载成类的成员函数不能重载成全局函数

class Date
{
public:
 Date(int year = 1900, int month = 1, int day = 1)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 int _year;
 int _month;
 int _day;
};
// 赋值运算符重载成全局函数,注意重载成全局函数时没有this指针了,需要给两个参数
Date& operator=(Date& left, const Date& right)
{
 if (&left != &right)
 {
 left._year = right._year;
 left._month = right._month;
 left._day = right._day;
 }
 return left;
}
// 编译失败:
// error C2801: “operator =”必须是非静态成员

 

 3. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。注 意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符 重载完成赋值。

举报

相关推荐

0 条评论