友元函数
使用方法
在类内用friend声明的函数,可以访问类的所有成员和方法,需要在类外定义.
友元函数的作用
可以访问类内的成员,可以访问私有属性,破坏了类的封装性
代码示例 友元函数
#include <iostream>
using namespace::std;
//友元函数,在类内用friend声明的函数,可以访问类的所有成员和方法,需要在类外定义.
class Person{
private:
int age;
int money;
public:
Person(int a,int b):age(a),money(b){
}
void display(){
cout<<"age="<<age<<endl<<"money="<<money<<endl;
}
friend int add(Person a,Person b);//在类内声明友元函数,在类外定义
friend int sub(Person &a,Person& b);
friend int mul(const Person& a,const Person& b);
};
int sub(Person &a,Person& b){//使用引用参数,可以不用生成中间临时对象
return a.age - b.age;
}
int mul(const Person& a,const Person& b){//使用const作为形参,可以接受 const的类型,也可以接受非const类型
return a.age * b.age;
}
int main(int argc, const char * argv[]) {
Person p1(10,100);
Person p2(11,200);
const Person p3(12,300);
cout<< add(p1,p2)<<endl;
cout<<sub(p1,p2)<<endl;
//cout<<sub(p2,p3)<<endl;//编译报错,因为p3是const类型对象,而sub不能接受const类型参数
cout<<mul(p1,p2)<<endl;
cout<<mul(p2,p3)<<endl;//可以接受const类型对象和非const对象
}
友元类
使用方法
在类内用friend class声明的类,可以访问类的所有成员和方法,需要在类外定义.
友元类的作用
可以访问类内的所有成员,可以访问私有属性,破坏了类的封装性
代码示例 友元类
#include <iostream>
using namespace::std;
//友元类,如果在一个类A中声明一个类B为他的友元类,那么B就能访问A的所有成员.跟友元函数一样,只不过友元类是,友元类能访问一个类的所有成员
class Person{
private:
int age;
int money;
public:
Person(int a,int b):age(a),money(b){
}
void display(){
cout<<"age="<<age<<endl<<"money="<<money<<endl;
}
friend class School;//声明Scholl为 友元类
};
class School{
public:
int add(const Person &a, const Person &b){
return a.age + b.age; //Scholl可以访问Person的私有属性age
}
};
int main(int argc, const char * argv[]) {
Person p1(10,100);
Person p2(11,200);
cout<< School().add(p1, p2) <<endl;
}