C++复习(5):类的六个默认成员函数

  1. **构造函数:**构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主
    要任务并不是开空间创建对象,而是初始化对象。
  • 构造函数的特性:
    (1)函数名与类名相同。
    (2)无返回值。
    (3)对象实例化时编译器自动调用对应的构造函数。
    (4)可以重载。
  • 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参
    构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。
  • 编译器生成默认的构造函数会对自定义类型(class,struct,union定义的类型)成员调用的它的默认成员函数。
  • 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括
    号中的初始值或表达式。
    例如:
class Date
{
public:
Date(int year, int month, int day)
 : _year(year)
 , _month(month)
 , _day(day)
 {}
private:
int _year;
int _month;
int _day;
};

*当类成员变量包含类类型、const类型、引用类型时必须放在初始化列表中进行初始化。
*成员变量的初始化顺序是其在类中的声明顺序,而与其初始化列表中的顺序无关。
*构造函数不仅可以构造与初始化对象,对于单个参数的构造函数,还具有类型转换的作用;可以使用explicit关键字声明构造函数
使单参数构造函数不能进行隐式类型转换。如:

class Date
{
public:
//Date(int year)
 //:_year(year)
 //{}
explicit Date(int year)
 :_year(year)
 {}
private:
int _year;
int _month:
int _day; };
void TestDate()
{
Date d1(2018);
// 用一个整形变量给日期类型对象赋值
// 实际编译器背后会用2019构造一个无名对象,最后用无名对象给d1对象进行赋值;当用explicit关键字声明时该语句会报没有匹配的=运算符的错误。
d1 = 2019; }
  1. **析构函数:**析构函数是特殊的成员函数,对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。
  • 析构函数的特性:
    (1)析构函数名是在类名前加上字符 ~。
    (2) 无参数无返回值。
    (3) 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
    (4) 对象生命周期结束时,C++编译系统系统自动调用析构函数。
  • 编译器自动生成的析构函数函数调用其自定义类型成员的析构函数。
  1. 拷贝构造函数: 只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建
    新对象时由编译器自动调用。
  • 拷贝构造函数的特性:
    (1)拷贝构造函数是构造函数的一个重载形式。
    (2)拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。
  1. 赋值运算符重载:
  • 运算符重载的规则:
    (1) 函数名字为:关键字operator后面接需要重载的运算符符号。
    (2)函数原型:返回值类型 operator操作符 (参数列表)
    (3)不能通过连接其他符号来创建新的操作符:比如operator@ 。
    (4)重载操作符必须有一个类类型或者枚举类型的操作数。
    (5)用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义。
    (6)作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的。
    (7)操作符有一个默认的形参this,限定为第一个形参。
    (8)* :: sizeof ?: . 注意以上5个运算符不能重载。
  1. **取地址及const取地址:**这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比
    如想让别人获取到指定的内容。

  2. 补充:类的const成员函数:

  • 定义:在成员函数原型后面加const,const修饰this指针所指向的对象(即调用成员函数的当前对象),表示在该函数调用时this指针指
    向对象的成员不可改变。
const成员函数可以调用其他const成员函数,而不可调用非const成员函数;
非const成员函数可以调用const成员函数和非const成员函数。
发布了25 篇原创文章 · 获赞 4 · 访问量 2550

猜你喜欢

转载自blog.csdn.net/qq_43167575/article/details/100604357