栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++核心编程(十七)友元

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++核心编程(十七)友元

注意:如果一个类中的函数static修饰的函数,不能作为友元函数;

全局函数作友元:
1)全局函数的声明在类中
2)全局函数的定义在类外
3)加关键字friend
4)能够访问类的对象上的私有成员

#include
using namespace std;
class friend_global_function
{
friend void golbal_function(friend_global_function & obj);//在类中添加关键字firend修饰,并且声明
public:
    void pu_function()
    {
        cout<<"this is public function"<
        cout<<"this is private function"<
    obj.pu_function();
    cout<<"pu="<#include
using namespace std;
class m_h_friend
{
friend class as_friend; 
public:
    void m_h_friend_pu_function()
    {
        cout<<"this is m_h_frien_pu_function"<
        cout<<"this is m_h_friend_pr_function"<
public:
    void as_friend_pu_function(m_h_friend &obj)
    {
        obj.m_h_friend_pu_function();
        cout<<"pu_variable="<#include
using namespace std;
class home
{
friend class god_gay;
public:
        void drawing();
private:
        void bedroom();
};
class god_gay
{
public:
        god_gay()
        {
            this->my_home=new home;//在堆区开辟一个空间存放类的对象的指针并且将该指针返回赋值给my_home
        }
        void into_home();
private:
        home *my_home;
};
void god_gay::into_home()
{
    my_home->bedroom();
    my_home->drawing();
}
void home::drawing()
{
    cout<<"drawing"<
    cout<<"bedromm"<
    god_gay gay;
    gay.into_home();
}

成员函数作友元
1)假设B类中的函数b_f()是A类的友元函数,那么在调用B类中的函数b_f()的时候调用该函数的对象可以访问A类对象上的私有成员。
2)假设B类中的函数b_f()是A类的友元函数,在声明b_f()是A类的友元函数之前,需要先在B类中声明b_f()函数,否则会报错。

例子;

#include
using namespace std;
class A;
class B;

class B
{
public:
    B();
    void B_f1();
    void B_f2();//注意函数的首次声明应该在声明它为友元成员函数之前。
    A *a_obj;    
};

class A
{
friend  void B::B_f2();//在声明这个函数为友元成员函数之前要先在它本来属于的类中先声明
public:
        A();
        int A_variable;
private:
        int A1_variable;
};

//int A::A_variable=10;//不能在外部定义普通变量
A::A():A_variable(10),A1_variable(20)
{
}
B::B()
{
    a_obj=new A;
}
void B::B_f1()
{
    cout<A_variable<
    cout<A_variable<A1_variable<
    B b;
    b.B_f1();
    b.B_f2();
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号