做网站好的框架,wordpress如何轮播,wordpress如何上传文件大小,wordpress 文章列表模板一、友元形式#xff1a;友元函数#xff0c;友元类
二、先说友元类#xff0c;假设有A,B类#xff0c;在B中声明A类为友元#xff0c;那么A就可以访问B中的任意成员#xff0c;
说明一下#xff0c;也不是通过A直去访问B#xff0c;其实还是B直接去访问#xff0c;…一、友元形式友元函数友元类
二、先说友元类假设有A,B类在B中声明A类为友元那么A就可以访问B中的任意成员
说明一下也不是通过A直去访问B其实还是B直接去访问不用写Get,Set等函数通过点号访问不过是在A的成员函数中实现这就是友元的作用我的理解是省去属性代码的编写又对外其他对象屏闭实现
比较经典的代码摘录
#include iostreamusing namespace std;
class Address; //提前声明Address类
//声明Student类class Student{public: Student(char *name, int age, float score);public: void show(Address *addr);private: char *m_name; int m_age; float m_score;};
//声明Address类class Address{public: Address(char *province, char *city, char *district);public: //将Student类声明为Address类的友元类 friend class Student;private: char *m_province; //省份 char *m_city; //城市 char *m_district; //区市区};
//实现Student类Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }void Student::show(Address *addr){ coutm_name的年龄是 m_age成绩是 m_scoreendl; cout家庭住址addr-m_province省addr-m_city市addr-m_district区endl;}
//实现Address类Address::Address(char *province, char *city, char *district){ m_province province; m_city city; m_district district;}
int main(){ Student stu(小明, 16, 95.5f); Address addr(陕西, 西安, 雁塔); stu.show(addr); Student *pstu new Student(李磊, 16, 80.5); Address *paddr new Address(河北, 衡水, 桃城); pstu - show(paddr); return 0;} 三、友元函数
与友元类用法差不多它又分两种情况 1非成员函数声明为友元直接访问类的私有成员
#include iostream using namespace std;
class Student{ public: Student(char *name, int age, float score); public: friend void show(Student *pstu); //将show()声明为友元函数 private: char *m_name; int m_age; float m_score; };
Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
//非成员函数 void show(Student *pstu){ coutpstu-m_name的年龄是 pstu-m_age成绩是 pstu-m_scoreendl; } 注意看调用的时候它不属于类的成员因此可以直接用,即它是全局的
int main(){Student stu(小明, 15, 90.6);show(stu); //调用友元函数Student *pstu new Student(李磊, 16, 80.5);show(pstu); //调用友元函数return 0;
}
2将其他类的成员函数声明为友元函数
假设现有的两个类A,B都已经定义好了A中有一个函数需要访问到B中的成员作参数为了省去属性在A中声明这个函数的同时在B中也声明一遍就可以了直接访问了
访问调用方式跟上面是一样的
#include iostream
using namespace std;class Address; //提前声明Address类//声明Student类
class Student{
public:Student(char *name, int age, float score);
public:void show(Address *addr);
private:char *m_name;int m_age;float m_score;
};//声明Address类
class Address{
private:char *m_province; //省份char *m_city; //城市char *m_district; //区市区
public:Address(char *province, char *city, char *district);//将Student类中的成员函数show()声明为友元函数friend void Student::show(Address *addr);
};//实现Student类
Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
void Student::show(Address *addr){coutm_name的年龄是 m_age成绩是 m_scoreendl;cout家庭住址addr-m_province省addr-m_city市addr-m_district区endl;
}//实现Address类
Address::Address(char *province, char *city, char *district){m_province province;m_city city;m_district district;
}int main(){Student stu(小明, 16, 95.5f);Address addr(陕西, 西安, 雁塔);stu.show(addr);Student *pstu new Student(李磊, 16, 80.5);Address *paddr new Address(河北, 衡水, 桃城);pstu - show(paddr);return 0;
}