c++学习记录(十二)

运算符重载为友元函数

  • 一般情况下,将运算符重载为类的成员函数是较好的选择
  • 但有时,重载为成员函数不能满足使用需求,重载为普通函数又不能访问类的私有成员,故要将运算符重载为友元
  • 例如
class Complex
{
    double real,imag;
    public:
    Complex(double r,double i):real(r),imag(i){};
    Complex operator+(double r);
};
Complex Complex::operator+(double r)
{
    return Complex(real+r,imag);
}
  • 经过上述重载后
Complex c;
c=c+5;//有定义,相当于c=c.operator+(5);
c=5+c;//编译出错
  • 所以为了使c=5+c成立,需将加号重载为普通函数
Complex operator + (double r,const Complex & c)
{
    return Complex(c.real+r,c.imag);
}
//要使普通函数能够访问其私有成员real和imag所以需要设置友元
class Complex
{
    double real,imag;
    public:
    Complex(double r,double i):real(r),imag(i){};
    Complex operator+(double r);
    friend Complex operator+(double r,const Complex & c);
};

运算符重载的实例:可变长整型数组

  • 预告:接下来是大片代码·-·
  • 附有详细注释
int main(){//要编写可变长整型数组类,使之能如下使用
    CArray a;//开始数组是空的
    for(int i=0;i<5;++i)
        a.push_back(i);//要用动态内存分配来存放数组元素,需要一个指针成员变量
    CArray a2,a3;
    a2=a;//要重载`=`
    for(int i=0;i

你可能感兴趣的:(c++学习记录(十二))