简体   繁体   中英

friend function in c++ is not accessing private members

I am learning c++ and have wrote this simple program to understand the working of friend function (ignore all the complication i made by using complex syntax in the code because i am learning and i practice the syntax that i learn in programs). The friend function is not accessing the private members of test and stu.

#include<iostream>
#include<conio.h>

class test;

class stu
{
    private:
        int z;
    public:
        stu(int z)
        {
            this->z=z;
        }
    
        friend disp(stu,test);
        
        ~stu(void)
        {
            std::cout<<"Destructor of stu class is executed!!"<<std::endl;
        }
        
};

class test{
    private:
        int x;
    public:
        test(int a)
        {
            x=a;
        }
        
        friend disp(stu,test);
        
        ~test(void)
        {
            std::cout<<"Destructor is executed!!"<<std::endl;
        }
    
};

class test2:public test
{
    private:
        int b;
    public:
        test2(int b)
        {
            this->b=b;
        }
        
        void show(void);
        
        ~test2(void)
        {
            std::cout<<"Destructor of second class executed!!"<<std::endl;
        }
};


int main()
{
    test t1(3);
    test2 t2(5);
    t2.show();
    stu s1(10);
    disp(s1,t1);
    
    return 0;
}

void test2::show(void)
{
    std::cout<<"Value of k = "<<b<<std::endl;
}

void disp(stu s2, test t2)
{
    int sum;
    sum = s2.z + t2.x;
    std::cout<<"Sum  =  "<<sum<<std::endl;
}

Try to define the disp function before the main function:

void disp(stu s2, test t2)
{
    int sum;
    sum = s2.z + t2.x;
    std::cout<<"Sum  =  "<<sum<<std::endl;
}

int main()
{
    test t1(3);
    test2 t2(5);
    t2.show();
    stu s1(10);
    disp(s1,t1);
    
    return 0;
}

and change the disp function signature as:

friend void disp(stu,test);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM