Essential C++ 笔记(5):基于对象的编程风格(下)

本文是Essential C++笔记的第五部分,深入讲解了C++中的友元、拷贝赋值运算符、函数对象、iostream运算符重载以及指向类成员函数的指针。详细阐述了如何实现深拷贝、创建函数对象、自定义iostream操作以及如何使用指针调用类成员函数,进一步理解C++面向对象编程的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  继上篇的文章《Essential C++ 笔记(4):基于对象的编程风格(上)》,继续更新Essential C++ 笔记。

7、合作关系必须建立在友谊的基础上

  任何class均可以将其他函数或其他类指定为它的朋友(friend)。所谓的friend就具备了和类成员函数相同的访问权限。在类的内部必须是将非成员函数设为朋友。

class Triangular {
   
	friend int operator*(const Triangular_iterator &rhs);
};
class Triangular_iterator {
   
	friend int operator*(const Triangular_iterator &rhs);
};

//类的外部定义
inline int operator*(const Triangular_iterator &rhs){
   
	rhs.check_integrity(); // 可以直接访问类的私有成员
	return Triangular_iterator::_elems[rhs.index()]; // 可以直接访问类的私有成员
}

  可以先令A类与B类建立友元关系,让A类的所有成员函数称为B类的友元。

class Triangular {
   
	//Triangular_iterator中的所有成员函数都是Triangular中的友元。
	friend class Triangular_iterator;
};

8、实现一个Copy assignment operator(拷贝赋值运算符)

  下面的代码属于默认的成员逐一赋值操作:

Triangular tri1(8), tri2(8, 9);
tri1 = tri2;

  但对于第二节中的Matrix类,上述拷贝过程只是浅拷贝,我们需要的是深拷贝,这时需要一个拷贝构造函数和一个拷贝赋值运算符:

Matrix& Matrix::operator=(const Matrix &rhs){
   
	if(this != &rhs){
   
		_row = rhs._row;
		_col = rhs._col;
		int elem_cnt = _row * _col;
		delete [] _pmat;
		_pmat = new double[elem_cnt];
		for(int ix = 0; ix < elem_cnt; ix++)
			_pmat[ix] =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值