如何访问friend类方法?

Pea*_*Gen 3 c++ friend visual-studio-2010

我是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;
};
Run Code Online (Sandbox Code Playgroud)

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)
{
}
Run Code Online (Sandbox Code Playgroud)

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;
};
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我需要在GameComponent的方法中访问display()属于类Position的朋友类GameComponentupdate(const tm* time)方法.实际上我想要做的是访问类的私有数据成员Position.我怎样才能做到这一点?请帮忙

nog*_*ard 6

C++友谊以另一种方式工作:如果GameComponent声明Position为朋友,则意味着可以Position访问所有私有方法GameCompenent.你需要的恰恰相反:Position从中调用私有方法GameComponent

因此,如果Position::displayPositions()您要从GameComponent访问Position类的私有方法,那么您可以声明GameComponent为以下的朋友Position:

class Position
{
    friend class GameComponent;
    ...
};
Run Code Online (Sandbox Code Playgroud)