友元与运算符重载

来源:互联网 发布:php小炒花生米 编辑:程序博客网 时间:2024/05/16 06:25

友元

对于类的私有方法,只有该类中可以访问,其他类中不能访问。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。

0 0
原创粉丝点击