网站网页设计制作,上海建筑建材业网电话,网站设计 网站开发 西安,网盘推广赚钱文章目录前言一、基本概念二、程序示例1.全局函数调用私有成员2. 外部类调用私有成员3. 外部类的成员函数调用私有成员总结前言 一、基本概念
友元是C中为了方便类外的类或者函数访问类内私有成员而定义的一种特殊语法#xff0c;用friend关键字进行修饰。
二、程序示例
友…
文章目录前言一、基本概念二、程序示例1.全局函数调用私有成员2. 外部类调用私有成员3. 外部类的成员函数调用私有成员总结前言 一、基本概念
友元是C中为了方便类外的类或者函数访问类内私有成员而定义的一种特殊语法用friend关键字进行修饰。
二、程序示例
友元包括3种实现形式示例如下
1.全局函数调用私有成员
用一个 比较有意思的例子女生的真实年龄是私有名字是公有只有她的朋友才能知道她的真年龄。 调用时在私有成员的类内对函数加上friend关键字。
#includeiostream
using namespace std;class Girl
{//加上友元关键字即可访问类中的私有成员friend void Ask(Girl* girl);public:Girl(){Name nana;Fake_Age 20;Age 25;}//参数定义
public:string Name ;int Fake_Age;private:int Age;
};//全局函数,使用地址传递
void Ask(Girl *girl)
{cout 女孩的名字叫 girl-Name endl;cout 女孩的年龄叫 girl-Fake_Age endl;cout 女孩的真实年龄是 girl-Age endl;
}int main()
{Girl girl;Ask(girl);
}女孩的名字叫nana
女孩的年龄是20
女孩的真实年龄是252. 外部类调用私有成员
外部类调用时需要在私有成员的类内声明friend关键字。
#includeiostream
using namespace std;//类做友元
class Girl
{//男朋友才能查看真实的年龄friend class Boy;//参数定义
public:Girl();string Name;int Fake_Age;private:int Age;
};class Boy
{
public:Boy();string CheckAge(string name);Girl * girl;struct BoyName{string Name;};
};//类外写成员函数
Girl::Girl()
{Name nana;Fake_Age 20;Age 25;
}Boy::Boy()
{girl new Girl;
}string Boy::CheckAge(string name)
{if(name 小李){ cout name 正在查看 girl-Name 的年龄是 girl-Fake_Age endl;}if (name 小王){ cout name 正在查看 girl-Name 的年龄是 girl-Age endl;}return name;
}int main()
{Boy boy;//对Boy内的结构体声明两个对象Boy::BoyName boyname1 {小李};Boy::BoyName boyname2 { 小王 };boy.CheckAge(boyname1.Name);boy.CheckAge(boyname2.Name);
}小李正在查看nana的年龄是20
小王正在查看nana的年龄是253. 外部类的成员函数调用私有成员
这里需要注意Boy类需要写在Girl类的前面不然会访问权限会报错,在定义成员函数友元的时候必须先对成员函数进行声明。
#includeiostream
using namespace std;class Girl;
class Boy
{
public:Boy();void CheckAge();Girl* girl;
};
//类做友元
class Girl
{//CheckAge方法才能查看真实的年龄friend void Boy::CheckAge();//***********//参数定义
public:Girl();string Name;int Fake_Age;private:int Age;
};//类外写成员函数
Girl::Girl()
{Name nana;Fake_Age 20;Age 25;
}Boy::Boy()
{girl new Girl;
}void Boy::CheckAge()
{cout 正在查看 girl-Name 的年龄是 girl-Age endl;
}int main()
{Boy boy;boy.CheckAge();
}总结
友元提供了更加灵活的封装语法也使程序变得更加复杂有利有弊。