friend & operator

以上

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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值