友元与运算符重载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cmh477660693/article/details/69457473

友元

对于类的私有方法,只有该类中可以访问,其他类中不能访问。C++语言提供了友元类和友元方法来实现访问其他类的私有成员,当用户希望访问当前类的私有成员时,可以在当前类中将另一个作为自己的有元类,这样另一类中就可以访问当前类的私有成员。

class Cltem{
private:
char name[128];
void OutputName()
{printf("%s\n",name);}
}
public:
friend class Clist;
void SetName(const char * pdata){}
};
class Clist{
private:
Cltem m_ltem;
public:
void OutPut();
};
void clist::OutPut()
{
m_ltem.OutputName();
}

在定义CItem类时,使用friend关键字将Clist类定义为CItem类的友元方法,这样Clist的所有方法都可以访问CItem类的私有成员m_ltem.OutputName();
友元方法,在定义类时,可以将类的某个方法定义为友元方法,这样就限制只有该方法才可以访问这个类的私有成员。

运算符重载

#include<iostream>
#include<string.h>
using namespace std;
class Point{
private:
    int x;
    int y;
public:

    Point(){
        cout<<"Point()"<<endl;
    }
    Point(int x,int y):x(x),y(y){
        cout<<"Point(int x,int y):x(x),y(y)"<<endl;
    }
    Point(const Point &p)
    {
        cout<<" Point(const Point &p)"<<endl;
        x=p.x;
        y=p.y;
    }
    ~Point()
    {
        cout<<" ~Point()"<<endl;
    }
    int getX(){return x;}
    int getY(){return y;}
    void setX(int x){this->x=x;}
    void setY(int y){this->y=y;}
    void printInfo()
    {
            cout<<"("<<x<<","<<y<<")"<<endl;
    }
    friend Point operator+(Point &p1,Point &p2);
    friend Point add(Point &p1,Point &p2);
    friend Point& operator++(Point &p);
    friend Point operator++(Point &p,int a);
};
Point add(Point &p1,Point &p2)
{
    Point n;
    n.setX(p1.getX()+p2.getX());
    n.setY(p1.getY()+p2.getY());
    return n;
}
Point operator+(Point &p1,Point &p2)
{
    cout<<"operator+"<<endl;
    Point n;
    n.setX(p1.getX()+p2.getX());
    n.setY(p1.getY()+p2.getY());
    return n;
}
/*Point p(1,2);++p*/
Point& operator++(Point &p)
{
    cout<<"++P"<<endl;
    p.x+=1;
    p.y+=1;
    return p;
}
/*point p(1,2); p++*/
Point operator++(Point &p,int a)
{
    cout<<"p++"<<endl;
    Point n;
    n=p;
    p.x+=1;
    p.y+=1;
    return n;
}
int main()
{
    Point p1(1,2);
    Point m,n;
    cout<<"begin"<<endl;
    m=++p1;
    m.printInfo();
    cout<<"------------"<<endl;
    p1.printInfo();
    n=p1++;
    n.printInfo();
    p1.printInfo();
    cout<<"end"<<endl;

    return 0;
}

const成员变量只能调用const成员函数。const成员函数即在函数末尾加上const,或者构造函数的参数声明为const。

猜你喜欢

转载自blog.csdn.net/cmh477660693/article/details/69457473