以上
class Vector
{
private:
int x;
int y;
public:
Vector(){};
Vector(int X, int Y){
x = X;
y = Y;
}
Vector(Vector & b){
x = b.x;
y = b.y;
}
//友元函数不是类的成员,但是与类有同样的访问权限
//利用友元函数重载二元操作符”-“时,形式参数是两个
//而利用类成员函数时,形式参数却只有一个
//因为类成员函数中存在this指针,这相当于一个参数,所以类成员实现操作符重载需要的形式参数比原来少一个
//这比如:利用类成员函数实现一元操作符”-“,就不需要参数了。
//也正是因为这个原因,友元函数实现的操作符重载是有限制的
//比如:[] ,(),->和 =不能利用友元函数实现运算符的重载。
//在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。
//通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符=。
//还有如果需要修改对象内部的状态,一般可以选择利用类成员函数进行修改。
friend Vector operator+(const int n, Vector b);
Vector operator*(const Vector &b) const;
};
//关于类的访问权限
//1.私有策略(private)
//数据成员申明为private
//上面的例子就是私有策略,类的私有变量只有类内部可以访问,包括同类非同变量的私有变量
//2.唯一成员访问(member-only access)
//数据成员申明为protected
//访问权限于家族函数
//仅仅可以被类的任何子类的数据成员以及成员函数访问
//类层次之外的函数不能访问
class A :public semaphore{
protected:
semaphore X;
public:
A(void);
};
main{
A temp;
temp.X.lock();//这里的调用非法的
}
//3.公开(public)