2013-10-27 2 views
0

main에서 Class_D에 선언 된 기능 친구에게 액세스하는 데 도움이 필요합니다. 진행 지침.친구 액세스 기능

/* Main.cpp */ 

    #include <iostream> 
    #include "types.h" 
    #include "Class_A.h" 
    #include "Class_C.h" 

    int main() 
    { 
    cout << " Project started" << endl; 
    /* Creating Obj of Class A */ 
    A obj1; 
    /* Accessing Funcition of Class C through A */ 
    obj1.SetFuncA();   
    /* How to access GetFuncD(); from main*/ 
    cin.get(); 
    return 0; 
    } 

/* types.h */ 
#ifndef TYPES_H 
#define TYPES_H 

#include <iostream> 
#include <stdlib.h> 

#define ENAB_FRIEND_CLASS(x) friend class x 

using namespace std; 

typedef unsigned int U32; 
typedef unsigned short U16; 
typedef unsigned char U8; 


typedef int S32; 
typedef short S16; 
typedef char S8; 


#endif 

/* Class_A.h*/ 

#ifndef CLASS_A_H 
#define CLASS_A_H 


class D; 

class A { 
     private : 
     int i; 
     int j;  
     public :     
     A();   /* Default Constructor */                 
     ~A();   /* Default Destructor */                        
     void SetFuncA(); 
     int GetFuncA(); 
     friend int D::FGetFuncD(D &obj); 
     protected:    
     }; 

#endif 

/* Class_D.h */ 
#ifndef CLASS_D_H 
#define CLASS_D_H 

class D { 
     private : 
     int i; 
     int j;  
     public :     
     D();   /* Default Constructor */                 
     ~D();   /* Default Destructor */                        
     void SetFuncD(); 
     int GetFuncD(); 
     void FGetFuncD(D &obj); 
     protected:    
     }; 

void FGetFuncD(D &obj) 
{ 
cout << "\n i " << obj.i << endl;  
cout << "\n i " << obj.j << endl; 
} 


#endif 

/* Class_A.cpp */ 


#include "Class_A.h" 
#include "types.h" 
#include "Class_C.h" 

A :: A() 
{ 
cout << "Default CTOR Called\n" << endl;  
} 

A :: ~A() 
{ 
cout << "Default DTOR Called\n" << endl;  
} 

void A::SetFuncA() 
{ 
    int ret = 0; 
    cout << "\n SetFuncA " << endl; 

    /* Creating Object of class C in Class A*/ 
    C Obj2; 

    /* Setting Private members */ 
    Obj2.SetFuncC(); 

    /* Calling Function of class C in Class A */ 
    ret = Obj2.GetFuncC(); 

    cout << " M = " << ret << endl; 

    /* Dynamically Allocate memory for Class C */ 
    C *ptr = new C(); 

    /* Accessing private members of Class C */ 
    ptr->m =20; 

    /* Accessing Public Function of Class C*/ 
    ret = ptr->GetFuncC(); 

    cout << " M = " << ret << endl; 

    /* Accessing Enum */ 
    ptr->m_bLEVEL = ptr->KN_LEVEL_1; 

    cout << " ENUM = " << ptr->m_bLEVEL << endl; 



} 


int A::GetFuncA() 
{ 
    cout << "\n GetFuncA " << endl; 
} 


/* Class_D.cpp*/ 

#include "types.h" 
#include "Class_D.h" 

D :: D() 
{ 
cout << "Default CTOR Called\n" << endl;  
} 

D :: ~D() 
{ 
cout << "Default DTOR Called\n" << endl;  
} 

void D::SetFuncD() 
{ 
    cout << "\n SetFuncD " << endl; 
    i = 30; 
} 

int D::GetFuncD() 
{ 
    cout << "\n GetFuncD " << endl; 
    return i; 
} 

나에게 수정의 필요성을 안내하시기 바랍니다는 친구 기능 class_d의 개인 멤버에 액세스하기 위해 수행된다.

친구 기능의 기능을 탐색하려고합니다. 그리고 Class_A.cpp/.h Class_D.cpp/.h와 main.cpp를 추가했습니다.

+1

정확히 어떤 문제가 있습니까? 'D :: GetFuncD'는'class A'와 같은 방법으로 사용합니다. 'class_d.h'를 포함하고,'D' 객체를 생성 한 다음'GetFuncD' 메소드를 호출하십시오. – greatwolf

답변

1

friend 함수는 클래스의 멤버가 아니지만 클래스의 비공개 및 보호 된 멤버에 대한 액세스 권한이있는 함수입니다. D.

의 인스턴스화 된 객체없이 FGetFuncD

public :     
    D();   /* Default Constructor */                 
    ~D();   /* Default Destructor */                        
    void SetFuncD(); 
    int GetFuncD(); 
    friend void FGetFuncD(D &obj); /* changed to friend function */ 

Here's pretty good documentation for it from Microsoft.

그런 다음 주에, 당신은 단지 호출 할 수 있습니다

public :     
    D();   /* Default Constructor */                 
    ~D();   /* Default Destructor */                        
    void SetFuncD(); 
    int GetFuncD(); 
    void FGetFuncD(D &obj); 

에 : 그래서, 당신의 클래스 D는에서 변경해야

int main() 
{ 
D obj2; 
obj2.SetFuncD(); 
int i_of_obj2 = FGetFuncD(obj2); /*using GetFuncD WITHOUT calling on a D object*/ 
cout << "i_of_obj2: " << i_of_obj2 << endl; 


cin.get(); 
return 0; 
} 

출력은 다음과 같아야합니다. i_of_obj2 : 30

+0

안녕하세요 !! 회원 기능과 친구 기능에 혼란스러워했습니다. friend 함수는 class_D.h 파일에 선언됩니다. 참조 된 함수는 멤버 함수입니다. 관심을 가져 주셔서 감사합니다. void FGetFuncD (D & obj) { cout << "\ n i"<< obj.i << endl; cout << "\ n i"<< obj.j << endl; } –

+0

안녕하세요. mxdg !! 나는 질의를 가지고있다. d 클래스의 객체를 전달해야 할 때, 친구 함수의 사용은 무엇인가. 때 개체를 만들 수 있습니다. 개체를 사용하여 개인 멤버에 액세스 할 수 있습니다. 내 쿼리는 클래스 d의 개체를 만든 다음 –

+0

이라는 friend 함수를 가져 오는 것이 아닙니다. 모든 함수에 대해 위의 friend 함수로 만드는 방법을 자세히 설명했습니다. 친구 기능은 구성원 기능이 아닐지라도 사물에 액세스 할 수 있도록하기위한 것입니다. 클래스의 인스턴스가 필요합니다. 예를 들어 친구 함수를 사용하여 두 개의 클래스 D 객체를 비교하여 해당 값이 같은지 확인할 수 있습니다. 이 친구 기능이 아니었다면 친구 부울 CompareI (D & OBJ1, D & obj2보다) { 리턴 (obj1.i == obj2.i) } , 우리는 내가 멤버 변수에 액세스 할 수 없습니다. 이것은 물건을 더 분명하게 하는가? – mxdg