054day(友元和运算重载符的基本概念)

本文介绍了C++中友元(包括友元函数和友元类)的概念及使用方式,并详细阐述了运算符重载的基本原理,包括重载限制等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

172210704111-陈国佳总结《2017年12月3日》【连续054】

标题:友元和运算重载符的基本概念;

内容:A.友元(friends):

1)友元函数:一个类的友元函数可以访问该类的私有成员。

class A;

class B{public: void mod1(A*pa)};

class A{private: int p;

friend int mod2(A a);

friend void B::mod1(B*pa);   //声明友元

};

void B::mod1(B*pa){}

int mod2(A a){   }

全局函数或一个类的成员函数(包括构造,析构函数)说明另一个类的友元。

2)友元类:如果A是B的友元类,那么A的成员函数可以访问B的私有成员。

class A{private: int a;

friend class B;           //声明B为友元类;         

};

class B{};

友元类的关系无法传递(朋友的朋友不是朋友),无法继承;

B.运算符重载的基本概念:

为了实现对象之间的运算,C++可以扩展运算符的试用范围;

其实质是函数重载:

把含运算符的表达式转换成对运算符函数的调用,操作数换成函数参数;

返回值类型   operator 运算符 (形参表)

{
}

例:

class Complex
{
public:
double real,imag;
Complex(double r=0.0,double i=0.0):real(r),imag(i){}
Complex operator-(const Complex&c);
};
Complex operator+(const Complex & a,const Complex &b)
{
return Complex(a.real+b.real,a.imag+b.imag);  //返回一个临时对象 
}
Complex Complex::operator-(const Complex & c)
{
return Complex(real-c.real,imag-c.imag);   //返回一个临时对象 
}
/*  重载为成员函数时,参数个数为运算符目数减一。
重载为普通函数时,参数个数为运算符数目  */

int main()
{
Complex a(4,4),b(1,1),c;
c=a+b;  //c=operator+(a,b);
cout<<c.real<<" "<< c.imag<<endl;
cout<<(a-b).real<<" "<<(a-b).imag<<endl;
//a-b等价于a.operator-(b);
return 0; 

C.翻了下书,看到了重载限制:

1.重载后的运算符必须至少有一个操作数是用户定义的类型;

2.重载后的运算符与原来的句法规矩一致,且优先级相同;

3.不能创造新运算符;

4.不能重载:sizeof  .   .*   ::   ?:  typeid  const_cast reinterpret_cast   static_cast

5.只能通过成员函数重载: =  ()  []  ->



明日计划:赋值运算符的重载;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值