2016-03-25 4 views
5

В данном коде C++ частный член класса DEF получает инициализацию в конструкторе и снова внутри функции friend. Таким образом переопределение будет перезаписывать частные переменные или значение, заданное конструктором, будет сохраняться?Используя функцию друга, можно ли перезаписать частный член класса?

#include<iostream> 

//class DEF; 

class ABC{ 
     public: 
       int fun(class DEF); 
}; 

class DEF{ 
     private: 
       int a,b,c; 

     public: 
     DEF():a(1),b(12),c(2){} 
     friend int ABC::fun(class DEF);/*Using friend function to access the private member of other class.*/ 
     void fun_2(); 
}; 

void DEF::fun_2(){ 
     cout<<"a : "<<&a<<' '<<"b : "<<&b<<' '<<"c: "<<&c<<endl; 
     cout<<"a : "<<a<<' '<<"b : "<<b<<' '<<"c: "<<c<<endl; 
} 

int ABC::fun(class DEF A){ 
     A.a = 10; 
     A.b = 20; 
     A.c = 30; 

     int data = A.a + A.b + A.c; 
     cout<<"a : "<<&(A.a)<<' '<<"b : "<<&(A.b)<<' '<<"c: "<<&(A.c)<<endl; 
     cout<<"a : "<<A.a<<' '<<"b : "<<A.b<<' '<<"c: "<<A.c<<endl; 
     return data; 
} 

int main(){ 
     cout<<"Inside main function"<<endl; 
     ABC obj_1; 
     DEF obj_2; 
     obj_2.fun_2(); 
     int sum = obj_1.fun(obj_2); 
     cout<<"sum : "<<sum<<endl; 
     obj_2.fun_2(); 

} 
+0

Во всяком случае, друг заявления являются время компиляции: они меняют не может ли компиляция или преуспевает при обращении к членам класса, нет run- времени. – stefaanv

ответ

2

В строке ниже:

int ABC::fun(class DEF A) 

Вы передавая аргумент по значению и, таким образом, значение локального объекта изменяется.

Для обеспечения значения сохраняющихся, передать значение по ссылке, как:

int ABC::fun(DEF &A) 
//    ^ <-- class is superfluous here 
Смежные вопросы