友元和运算符重载
类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的数据成员,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。
友元主要是用于运算符重载
1.友元函数(掌握)
定义:定义在类外部的普通函数,需要在类中用friend关键字进行说明。就可以访问类中所有的成员
注意事项:
- 函数参数是对象引用。
- 不是类内函数,不受类内权限修饰符限制。友元函数的声明可以写在类的任意位置
#include <iostream>
using namespace std;
class Person{
private:
string phoneNum;
string ID;
public:
Person(string phoneNum,string ID){
this->phoneNum=phoneNum;
this->ID=ID;
}
friend void test(Person& p);//声明了Test是Person类的友元函数
};
void test(Person& p){
cout<<"身份证号:"<<p.ID<<" 电话号码:"<<p.phoneNum<<endl;
}
int main()
{
Person p1("180XX888","3729XXX2020");
test(p1);
}
2.友元类
当类B是类A的友元类时,类B就可以访问类A中所有的成员
#include <iostream>
using namespace std;
class A{
private:
int value;
public:
A(int v):value(v){}
friend class B;
};
class B{
public:
void test(A& t){
cout<<t.value<<endl;
}
};
int main()
{
A aa(100);
B bb;
bb.test(aa);
}
友元关系的特点:
1.友元关系是单向的 a把b当朋友 b没有把a当朋友
2.友元关系不可传递 a和b是朋友 b和c是朋友 a和c不是朋友
3. 友元关系不可继承
3.运算符重载(掌握)
定义:在C++中,运算符的操作对象只能是基本数据类型。自定义类型是不能直接使用,所有