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