学习笔记
Posted 才极
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记相关的知识,希望对你有一定的参考价值。
面向对象编程风格(下)
Iterator Class
运算符
类内定义一些!=,*,++等运算符。运算符函数不用指定函数名,需要在运算符前加上关键字operator。
运算符重载的规则:
-
.,.*,::,?:这四类无法重载,其余均可以。
-
运算符的操作数的个数无法改变。二元运算符必须两个操作数,一元运算符需要一个操作数。
-
运算符的优先级无法改变。
-
运算符函数的参数列表中,必须至少有一个参数为类类型。
嵌套类型
使用typedef可以为某个类型设定不同的名称。
必须使用类作用于运算符来指引编译器。将指针嵌套放在每个类内,就可以提供有着相同名称的多个定义。
friend
任何class均可以将其他函数或其他类指定为它的朋友(friend)。所谓的friend就具备了和类成员函数相同的访问权限。在类的内部必须是将非成员函数设为朋友。
class B
friend int operator*(const A &a);
;
class A
friend int operator*(const A &a);
;
//类的外部定义
inline int operator*(const A &a)
a.函数(); // 可以直接访问类的私有成员
可以先令A类与C类建立友元关系,让A类的所有成员函数称为C类的友元。
class C
friend class A;
;
实现一个拷贝赋值运算符
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] = rhs._pmat[ix];
return *this;
以上是关于学习笔记的主要内容,如果未能解决你的问题,请参考以下文章