首页 > 代码库 > 【ThinkingInC++】30、友元
【ThinkingInC++】30、友元
/** * 功能:友元 * 时间:2014年8月20日16:13:42 * 作者:cutter_point */ /* *编译器知道如何传递一个地址,这一个地址具有固定的大小,而不管被传递的是什么对象 *然而试图传递整个对象的话,那么编译器就必须知道X的全部定义以确定他的大小以及如何 *传递,所以程序就无法声明一个类似于Y::g(X)的函数,所以下面的f(X*)函数必须是指针 */ struct X; struct Y { void f(X*); }; struct X //定义X类 { private: int i; public: void initialize(); //注意一个友元的申明必须在类的里面 friend void g(X*, int); //全局友元 friend void Y::f(X*); //结构体成员函数 friend struct Z; //友元类 friend void h(); }; void X::initialize() { i=0; } void g(X* x, int i) { x->i=i; } void Y::f(X* x) { x->i=47; } struct Z { private: int j; public: void initialize(); void g(X* x); }; void Z::initialize() { j=99; } void Z::g(X* x) { x->i+=j; } void h() { X x; x.i=100; } int main() { X x; Z z; z.g(&x); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。