C++的六个默认基本函数

六个默认函数

  1. 构造函数
  2. 拷贝构造函数
  3. 析构函数
  4. 赋值运算符重载
  5. 取址(&)运算符重载
  6. const修饰的取址运算符重载
    默认的意思 是如果我们在构造一个类时如果没有自定义某些方法,那么编译器就会自动调用它默认的方法。

1. 构造函数

作用:用来初始化对象的成员变量。
特点:

  1. 函数名与类名相同
  2. 没有返回值
  3. 没有this指针
  4. 新对象被创建时,由编译器自动调用,且在对象的生命周期内仅调用 一次
  5. 构造函数可以重载,实参决定了调用哪个构造函数
  6. 无参构造函数和全缺省的构造函数都认为是缺省的构造函数,
    并且缺省的构造函数只能一个
  7. 如果没有显式定义时,在必要情况下,编译器会合成一个默认的构造函数

初始化列表

用于对对象成员进行初始化,格式为在函数名和函数体之间,以一个冒号开始,后面跟着以逗号隔开的数据成员列表,在每个成员后接一个圆括号,括号中为初始化的内容。

例如:

class Time
{
public:
    //构造函数
    Time(int hour = 0, int minute = 0, int second = 0)
        :_hour(hour)
        ,_minute(minute)
        ,_second(second)
    {
    }
private:
    int _hour;
    int _minute;
    int _second;
};

注意事项:

  1. 每个成员函数只能初始化一次。
  2. 初始化列表只能用于初始化类的数据成员,并且数据成员在类中的定义顺序就是对数据成员的初始化顺序。当编译器扫描到并初始化完毕最后定义的数据成员后,初始化结束。
  3. 引用成员变量、const成员变量、类类型成员(该类有非缺省的构造函数) 这三种成员,必须用初始化列表进行初始化。

2. 拷贝构造函数

函数名也为类名,只有一个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时使用已存在的同类对象来进行初始化,由编译器自动调用。

特性:
  1. 对于构造函数的重载、构造函数的性质,拷贝构造函数均满足 。

  2. 参数必须使用类类型对象引用传递 ,如果是传值,则会引发无穷调用

  3. 如果没有显式定义,必要情况下,系统会自动合成一个默认的拷贝构造函数。默认的拷贝构造函数会依次拷贝类的数据成员完成初始化。若无必要,则编译器会通过复制的方式来完成对对象的拷贝功能

     class Time
     {
     public:
         //构造函数
         Time(int hour = 0, int minute = 0, int second = 0)
             :_hour(hour)
             ,_minute(minute)
             ,_second(second)
         {
             doSomeThing...
         }
     
         //拷贝构造函数
         Time(const Time& t)
             :_hour(t._hour)
             ,_minute(t._minute)
             ,_second(t._second)
         {
         }
         
     
     private:
         int _hour;
         int _minute;
         int _second;
     };
    
    实现场景
    1. 使用已经存在的对象创建新的对象
     Time t1(12,01,59);
        Time t2(t1);
    2. 传值方式作为函数的参数
      void FunTest1(const Time t)
        {
        }
    3. 传值方式作为函数返回值
    Time FunTest2()
    {
        Time t;
        return t;
    }

3.析构函数

与构造函数的功能相反,用于销毁对象,由编译器自动调用。
特点:

  1. 析构函数在类名(即构造函数名)加上字符~ (~time();)
  2. 析构函数无参数无返回值
  3. 一个类有且只有一个析构函数。若未显示定义,系统会自动生成缺省的析构函数
  4. 对象生命周期结束时,C++编译系统自动调用析构函数
  5. 注意析构函数体内并不是删除对象,而是做一些清理工作

4.赋值运算符重载

c++为了增强代码的可读性引入了运算符重载
特性:
函数名字为:关键字operator后面接需要重载的运算符号
函数原型为:返回值类型operator操作符(参数列表)
注意:

  1. 不能通过连接其他操作符来创建新的操作符:比如operator@
  2. 重载操作符必须有一个类类型或者枚举类型的操作数
  3. 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义
  4. 作为类成员的重载函数时,骑行餐看起来不操作数数目少1成员函数的操作符有一个默认的形参this,限定为第一个形参。
  5. *、::、sizeof、?、这五个运算符不能重载。
Date& operator=(const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
		
		return *this;
	}

5. 取地址操作符重载

也是操作符重载的一种
A* operator &();

6.const取地址运算符重载

const A* operator &() const;
当&重载为被const修饰的成员函数时,系统会默认地对返回值加上const修饰。
若对调用此重载时,若不显式调用自己定义的取地址重载,则系统会调用它自己默认的函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值