c++ class friend
c++ class friend
我正在尝试编译这样的代码:
#include <iostream>
using namespace std;
class CPosition
{
private:
int itsX,itsY;
public:
void Show();
void Set(int,int);
};
void CPosition::Set(int a, int b)
{
itsX=a;
itsY=b;
}
void CPosition::Show()
{
cout << "x:" << itsX << " y:" << itsY << endl;
}
class CCube
{
friend class CPosition;
private:
CPosition Position;
};
main()
{
CCube cube1;
cube1.Position.Show();
cube1.Position.Set(2,3);
cube1.Position.Show();
}
但是get"CCube::Position"在函数main()中无法访问3次。我希望类CPosition在CCube之外声明,这样我将来就可以在新的类中使用它,例如CBall:),但我如何在不使用继承的情况下使它工作呢。有可能吗:)?
谨致问候,PK
除了普通的getter之外,还应该有一个const getter
请注明退货参考。这允许您对SetXX()的任何调用都会影响CCube内Position的副本,而不是您一直在更新的副本。
class CCube
{
private:
CPosition Position;
public:
CPosition& getPosition() { return Position; }
CPosition const& getPosition() const { return Position; }
};
friend class CPosition;
表示CPosition现在可以访问CCube类的私有成员。对于其他所有类,成员仍然像您声明的那样是私有的。要使样品发挥作用,您需要:
class CCube
{
public:
CPosition Position;
};
errr,否,位置在函数"main"中不可见
公开。。。或者在中放入一个公共getter函数
您的好友声明需要是
friend int main();
您正在授予访问CCube私人会员的"main"权限。
好吧,您已经得到了错误的答案。不过有一件事:你计划让多维数据集访问CPosition(itsX,itsY)的私有成员吗?如果不是,则不需要将其声明为好友。如果是,可以考虑在CPosition中公开公共方法以返回X和Y,并且仍然不需要将其声明为友元。
我想说的是,你需要确保你需要利用朋友。这是一个很好的起点。
好的,可以使用:
class CCube
{
private:
CPosition Position;
public:
CPosition& getPosition() { return Position; }
};
main()
{
CCube cube1;
cube1.getPosition().Show();
cube1.getPosition().Set(2,3);
cube1.getPosition().Show();
}
感谢
您有三个问题:
CPosition
的可重用性- 如何影响形状的状态(在这种情况下,包括类型为
CPosition
的成员,但也可能包括int radius
或其他成员) friend
关键字的用法
你清楚地说你需要CPosition类可以从其他地方访问。好吧,这是课堂。问题1已解决。
如果你想让CCube
的用户能够改变CCube
的位置,你需要提供一种方法:
- 通过公开
CCube::Position
- 通过添加访问器方法-
CCube::MoveTo( const CPosition& p )
和CCube::GetPosition() const
正如@Firas所说:除非你真的确定自己需要friend
,否则不要玩它。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- 如何调用用于重载运算符"<<"的 friend 函数?
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- "friend"关键字在C++中是什么意思?
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- template<class T, int N> void h(T const(&)[N]); as friend function
- 为什么"friend class"没有验证是否存在?
- 即使"friend class rect"在平方类中被评论,为什么它要改变矩形类的私有变量?
- 我们如何在 c++ 中以朋友声明"friend elaborated-class-name ;"为例?
- 一个函数,它是允许'read access'其'private members'但不能"写入访问权限"的'friend of a Class'?
- 如何解决"class must be used when declaring a friend"错误?
- c++ class friend