2012-12-19 2 views
2

저는 C++을 처음 사용합니다. 다음 코드친구 클래스 방법에 액세스하는 방법은 무엇입니까?

Position.h

#pragma once 
class Position 
{ 
public: 
    Position(int x, int y, int z); 
    Position(); 
    ~Position(); 

    void display(); 

private: 
    int x; 
    int y; 
    int z; 
}; 

Position.cpp

#include "Position.h" 
#include <iostream> 

using namespace std; 

Position::Position(int x, int y, int z) 
{ 
    this->x = x; 
    this->y = y; 
    this->z = z; 
} 

Position::Position(){} 


Position::~Position(void) 
{ 
} 

GameComponent.h

#pragma once 
#include<time.h> 

class GameComponent 
{ 
public: 
    GameComponent(int); 
    GameComponent(); 
    ~GameComponent(void); 

    virtual void update(const tm*); 
    friend class Position; 

private: 
    int id; 
}; 
에서 참조하시기 바랍니다

GameComponent.cpp

#include "GameComponent.h" 
#include <iostream> 
#include <time.h> 
#include "DrawableGameComponent.h" 

using namespace std; 

GameComponent::GameComponent(int v):id(v) 
{ 

} 

GameComponent::GameComponent(){} 


GameComponent::~GameComponent(void) 
{ 

} 

void GameComponent::update(const tm* time) 
{ 
    cout << "ID : " << id << endl; 
    cout << "Update: " << time->tm_hour << ":" << time->tm_min << ":" << time->tm_sec << endl; 

    //Position::displayPositions(); 
} 

void Position::display() 
{ 
    cout << "X" << x << "Y" << y << "Z" << z << endl; 
} 

나는 GameComponent의 update(const tm* time) 방법 내부 클래스 GameComponent의 친구 클래스 Position에 속해있는 방법 display() 액세스해야합니다. 실제로 내가하려는 것은 클래스 Position의 개인 데이터 멤버에 액세스하는 것입니다. 어떻게해야합니까? ++ 우정이 다른 방식으로 작동

+0

다음을보십시오. http://www.cplusplus.com/doc/tutorial/inheritance/ – Lucian

+0

우정은 양방향 관계가 아니며, 다른 방향으로 연결됩니다. –

+0

또한, 디스플레이는 현재 공개로 선언되었으므로 여기서 우정의 필요성은 없습니다. – jpm

답변

5

C를 도와주세요 : GameComponent 친구로 Position를 선언하는 경우는 PositionGameCompenent의 모든 개인 방법에 액세스 할 수 있다는 것을 의미한다. 당신이 필요한 것은 정확히 반대 :

: Position::displayPositions() 당신이 다음 Position의 친구로 GameComponent를 선언 할 수 GameComponent에서 액세스 할 위치 클래스의 private 메소드 인 경우 그래서 GameComponent

에서 Position 개인 메소드를 호출

class Position 
{ 
    friend class GameComponent; 
    ... 
}; 
1

당신은 GameComponentPosition의 친구, 당신은 그것을 GameComponent의 개인 보호 회원, see wikipedia의 간단한 설명에 액세스 할 수 Position 할 수있는 방법을 확인해야합니다.

0

친구 클래스를 선언하면이 클래스가 비공개 데이터에 액세스 할 수 있습니다. 귀하의 예에서 GameComponentPosition 클래스가 GameComponent 비공개 메소드 및 속성에 액세스하도록 허용합니다. 당신은 정말 Position::display()가 공개되어이 때문에 필요가 없습니다 :

class Position 
{ 
    ..... 
    friend class GameComponent; 

}; 

나는 당신의 선언이 Position 클래스 (친절한 클래스를 GameComponent 만드는 주 안에 있어야합니다 귀하의 pourpose이 GameComponent에서 액세스 Position이라고 생각 이 선언문을 에서 Position 구성 요소에 액세스 할 수 있습니다.그러나, Position::display() 함수는 정적 함수가 아닙니다, 당신은 위치 객체를 실체화해야합니다 이런 식으로 뭔가 : 당신이 GameComponent에 속하는 더 Position 속성이없는 경우

class GameComponent 
{ 
    protected: 
     Position pos; 
}; 

void GameComponent::update(const tm* time) 
{ 
    cout << "ID : " << id << endl; 
    cout << "Update: " << time->tm_hour << ":" << time->tm_min << ":" << time->tm_sec << endl; 

    pos.displayPositions(); 
} 

당신이로 통과해야합니다 매개 변수 :

void GameComponent::update(const tm* time, Position & pos) 
{ 
    cout << "ID : " << id << endl; 
    cout << "Update: " << time->tm_hour << ":" << time->tm_min << ":" << time->tm_sec << endl; 

    pos::displayPositions(); 
} 

게다가, Positio의 Position::display 기능을 구현하는 것이 좋습니다. n.cpp

관련 문제