C++类的六个默认成员函数(总结)

C++类的六个默认成员函数(总结)

如果一个类中什么成员都没有,则简称为空类,但空类中并非什么都没有,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数
一、构造函数(特殊的成员函数)
二、析构函数(特殊的成员函数)
三、拷贝构造函数(特殊的成员函数)
四、赋值运算符重载函数
五、取地址操作符重载
六、 const修饰的取地址操作符重载
C++把类型分为两类:内置类型(基本类型)和自定义类型。
内置类型:int / char / double / 指针 / 内置类型数组 等等。
自定义类型:struct / class定义的类型。
默认构造函数有三种:全缺省的构造函数、无参的构造函数、用户不写编译器自动生成的构造函数。(注意:必须传参的构造函数并不是默认构造函数)
1)对内置类型的成员变量不做初始化处理。
2)对自定义类型的成员变量会去调用它的默认构造函数初始化。

// 像这两种类,我们就需要自己实现构造函数(对应第1小点)
class Date
{
	int _year;
	int _month;
	int _day;
};

class Stack  
{
	int* _pData;
	int _top;
	int _capacity;
};

// 像这种类,我们不需要自己实现构造函数,默认生成的就可以(对应第2小点)
class MyQueue
{
	Stack _pushST;
	Stack _popST;
};

赋值运算符重载函数

1.主要任务:两个已经存在的同类对象之间进行赋值拷贝。(把一个对象赋值给另一个对象)

2.特征:
1)函数名是 operator=,参数类型是引用(常用const修饰)。
2)函数返回值是引用(因为在内置类型中是可以连续赋值的,比如:i = j = k,所以最好沿用这个习惯)。
3)返回 *this。
4)若未显式定义,编译器会自动生成一个默认的赋值运算符重载函数。

类名& operator=(const 类名& 对象)
{
	// ...	
}

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

默认生成的赋值运算符重载函数:
1)对内置类型的成员变量,会完成按字节序的值拷贝(浅拷贝)。
2)对自定义类型的成员变量,会调用它的赋值运算符重载函数。

// 像这种类,默认生成的赋值重载函数完成浅拷贝就可以满足需求(对应第1小点)
class Date  
{
	int _year;
	int _month;
	int _day;
};

// 像这种类,因为默认生成的浅拷贝不能满足需求,所以需要我们自己实现深拷贝的赋值重载函数
class Stack  
{
	int* _pData;
	int _top;
	int _capacity;
};

// 像这种类,我们不需要自己实现赋值重载函数,默认生成的就可以(对应第2小点)
class MyQueue
{
	Stack _pushST;
	Stack _popST;
};

int main()
{	
	// 拷贝构造是用一个已经存在的对象去初始化一个马上创建实例化的对象
	Date d4(d1);  // 拷贝构造
	Date d5 = d1;  // 拷贝构造
	
	// 赋值拷贝是两个已经存在的对象之间进行赋值拷贝
	d2 = d1 = d3;  // 赋值拷贝
	d4 = d5;  // 赋值拷贝
	
	return 0;
}

取地址操作符重载 和 const修饰的取地址操作符重载

1.主要任务:都是取出对象的 this指针,即对象的地址。

2.特征:
1)若未显式定义,编译器会自动生成。

// 取地址操作符重载
类名* operator&()
{
	return this;
}

// const修饰的取地址操作符重载
const 类名* operator&()const
{
	return this;
}

Date* operator&()
{
	return this;
}

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值