如何访问友元类方法?
How to access the friend class method?
我是C++新手。请看下面的代码
位置.h
#pragma once
class Position
{
public:
Position(int x, int y, int z);
Position();
~Position();
void display();
private:
int x;
int y;
int z;
};
位置.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)
{
}
游戏组件.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;
};
游戏组件.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;
}
我需要访问方法display()
该方法,该方法属于游戏组件update(const tm* time)
方法中类GameComponent
的友元类Position
。实际上我正在尝试做的是访问类Position
的私有数据成员。我该怎么做?请帮忙
C++友谊以另一种方式工作:如果GameComponent
声明Position
为朋友,则意味着Position
可以访问GameCompenent
的所有私有方法。你需要的恰恰相反:从GameComponent
调用Position
私有方法
因此,如果Position::displayPositions()
是您要从游戏组件访问的 Position 类的私有方法,则可以将GameComponent
声明为Position
的朋友:
class Position
{
friend class GameComponent;
...
};
你应该让GameComponent
成为Position
的朋友,你目前拥有它的方式允许Position
访问GameComponent
的私人和受保护的成员,请参阅维基百科的简单解释。
当您声明好友类时,您允许该类访问您的非公共数据。在您的示例中,GameComponent
允许Position
类访问GameComponent
非公共方法和属性。
我认为您的 pourpose 是从GameComponent
访问Position
,因此您的声明必须在类Position
内,使GameComponent
成为一个友好的类(注意:您并不真正需要这个,因为Position::display()
是公开的:
class Position
{
.....
friend class GameComponent;
};
通过此声明,您可以从GameComponent
访问Position
组件。但是,Position::display()
函数不是静态函数,则需要实例化一个 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();
}
如果没有属于GameComponent
的Position
属性,则必须作为参数传递:
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();
}
此外,在位置上实施Position::display
功能是否是一种好的做法.cpp
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 基类中受保护的纯虚函数如何被基类的友元类使用?
- 为什么 gcc 无法从其前向声明中检测到友元类命名空间?
- 在C++中,友元类可以从友元类创建对象吗
- 友元类指向不同命名空间中同名的类
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 跨命名空间的友元类和不同的.H 文件
- 嵌套友元类所需的前向声明
- 隐式友元类库
- 友元类声明和成员函数声明
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?
- 什么时候使用友元类/函数而不是继承
- 为什么我不能实例化其构造函数在友元类中私有的类
- 在派生类或基类中,我应该在哪里声明友元类
- 友元类不工作 C++ 、'class T'阴影模板参数的声明
- 访问友元类模板基子句中的私有定义
- 使用友元类减少编译时间和依赖关系
- 如何访问友元类方法?
- 在模板类中重载友元运算符方法