1、友元- friend
我的理解:通过设置友元函数和友元类来让外部函数来访问私有成员,这样虽然破坏了类的封装型和隐藏性,但是提高了程序的运行效率(减少了某些安全性检查的过程)。
友元函数和友元类统称友元,在类中添加相关声明,友元类如下:(友元函数类似)
class PrivateClassA;
class FriendClassB;
class PrivateClassC;
class PrivateClassA{
friend class FriendClassB;
private:
int Mydata;
};
class FriendClassB{
public:
void PrintAmydata(){
testa.Mydata=100;
cout<<"友元类访问PrivateClassA的私有成员:"<<testa.Mydata<<endl;
}
private:
PrivateClassA testa;
};
class PrivateClassC{
public:
void PrintAmydta(){
testa.Mydata=100;
}
private:
PrivateClassA testa;
};
由报错可知,非友元类不能访问私有成员。(注意:在一个cpp文件写两个类以上且类之间有相互调用时,记得提前声明,或者按编译顺序写,不然可能会报错)
2、操作符重载operator
2.1在结构体或者类内部进行重载
class 类名{
public:
返回类型 operator 操作符(形参表){
//重载代码块
}
};
2.1在结构体或者类内部进行重载
class 类名{
friend 返回类型 operator 操作符(形参表);
};
//类外定义格式:
返回类型 operator操作符(参数表){
//重载代码块
}
//
// Created by 彭同学 on 2023/7/3.
//
#include <test1.h>
class OperatorTestClassA{
public:
int TestAData;
//重载 > (两个A类之间比较)
bool operator > (const OperatorTestClassA& test)const{
return this->TestAData > test.TestAData;
}
};
class OperatorTestClassB{
public:
int TestBData;
//重载 > (两个A类之间比较)
bool operator > (const OperatorTestClassB& test)const{
return this->TestBData > test.TestBData;
}
//A类外重载 > (A和B类之间比较)
friend bool operator < (const OperatorTestClassA& testa,const OperatorTestClassB& testb){
return testa.TestAData < testb.TestBData;
}
};
int main(){
OperatorTestClassA testa1;
OperatorTestClassA testa2;
testa1.TestAData=1;
testa2.TestAData=20;
cout<<(testa1>testa2)<<endl;
OperatorTestClassB testb;
testb.TestBData=100;
cout<<(testa1 < testb);
return 0;
}
关于类之间的重载,后面再补充。