Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使命名空间成为类的朋友? 我试图封装AdRoR5C++库,我想拥有一个渲染函数的命名空间。问题是为了使用渲染函数,我需要访问Sprite中的私有ALLEGRO_位图变量。理论上,我可以把所有的功能都交给精灵的朋友,但那会组织得很糟糕。另一个选择是拥有一个带有渲染函数的类,并使该类成为精灵的朋友。有没有一个更简单的方法来实现这一点,我没有想到 #包括 #包括“Sprite.h” 命名空间呈现 { //虚空渲染精灵(精灵精灵) //{ //绘制位图(sprite.mpBitmap); //} } #pragma一次 #包括 雪碧 { 公众: 雪碧(); Sprite(char*filepath); ~Sprite(); 精灵克隆(); int getHeight(); int getWidth(); void loadBitmap(char*filePath); 私人: 快板位图*MP位图; 精灵(常量精灵和精灵)=删除; };_C++_Oop_Encapsulation_Allegro - Fatal编程技术网

使命名空间成为类的朋友? 我试图封装AdRoR5C++库,我想拥有一个渲染函数的命名空间。问题是为了使用渲染函数,我需要访问Sprite中的私有ALLEGRO_位图变量。理论上,我可以把所有的功能都交给精灵的朋友,但那会组织得很糟糕。另一个选择是拥有一个带有渲染函数的类,并使该类成为精灵的朋友。有没有一个更简单的方法来实现这一点,我没有想到 #包括 #包括“Sprite.h” 命名空间呈现 { //虚空渲染精灵(精灵精灵) //{ //绘制位图(sprite.mpBitmap); //} } #pragma一次 #包括 雪碧 { 公众: 雪碧(); Sprite(char*filepath); ~Sprite(); 精灵克隆(); int getHeight(); int getWidth(); void loadBitmap(char*filePath); 私人: 快板位图*MP位图; 精灵(常量精灵和精灵)=删除; };

使命名空间成为类的朋友? 我试图封装AdRoR5C++库,我想拥有一个渲染函数的命名空间。问题是为了使用渲染函数,我需要访问Sprite中的私有ALLEGRO_位图变量。理论上,我可以把所有的功能都交给精灵的朋友,但那会组织得很糟糕。另一个选择是拥有一个带有渲染函数的类,并使该类成为精灵的朋友。有没有一个更简单的方法来实现这一点,我没有想到 #包括 #包括“Sprite.h” 命名空间呈现 { //虚空渲染精灵(精灵精灵) //{ //绘制位图(sprite.mpBitmap); //} } #pragma一次 #包括 雪碧 { 公众: 雪碧(); Sprite(char*filepath); ~Sprite(); 精灵克隆(); int getHeight(); int getWidth(); void loadBitmap(char*filePath); 私人: 快板位图*MP位图; 精灵(常量精灵和精灵)=删除; };,c++,oop,encapsulation,allegro,C++,Oop,Encapsulation,Allegro,更新: 因此,我看到一些评论,询问为什么sprite中的成员变量需要是私有的。这样做的目的是帮助维护封装的概念,并向库的最终用户隐藏Allegro代码。最终目标是最终用户永远不需要使用allegro代码,因为库将隐藏它的实现细节 至于为什么我不能为它做一个获得者。用我的教授的话来说,这会给我留下一个“漏洞百出的抽象”,从封装中去掉 朋友不是名称空间。什么意思?好的,读了你的散文之后,它变得更清晰了。你应该改变你的题目,这很让人困惑。同时,在一个文本块中写所有的散文也会使阅读变得有点困难。我相信你

更新:

因此,我看到一些评论,询问为什么sprite中的成员变量需要是私有的。这样做的目的是帮助维护封装的概念,并向库的最终用户隐藏Allegro代码。最终目标是最终用户永远不需要使用allegro代码,因为库将隐藏它的实现细节

至于为什么我不能为它做一个获得者。用我的教授的话来说,这会给我留下一个“漏洞百出的抽象”,从封装中去掉



朋友
不是
名称空间
。什么意思?好的,读了你的散文之后,它变得更清晰了。你应该改变你的题目,这很让人困惑。同时,在一个文本块中写所有的散文也会使阅读变得有点困难。我相信你也可以改进那里的结构。所以你想要访问一个私有变量。。。散发着代码的气味。如果您需要访问,为什么它是私有的?为什么
Sprite
没有自己的
Render()
函数?为什么不添加一个公共访问器成员函数来公开mBitmap?名称空间只是公共的,所以不需要友谊。程序中的任何东西都应该是有原因的。理想情况下,每个理由都足够简单,可以用一个简单的句子来表达。
呈现
名称空间的简单句子目的是什么?2)
RenderSprite
功能?3)
Sprite
类?基于这三个答案,我能告诉你为什么
RenderSprite
是名称空间的一部分而不是类的一部分吗?
friend
不是
名称空间
。什么意思?好的,读了你的散文之后,它变得更清晰了。你应该改变你的题目,这很让人困惑。同时,在一个文本块中写所有的散文也会使阅读变得有点困难。我相信你也可以改进那里的结构。所以你想要访问一个私有变量。。。散发着代码的气味。如果您需要访问,为什么它是私有的?为什么
Sprite
没有自己的
Render()
函数?为什么不添加一个公共访问器成员函数来公开mBitmap?名称空间只是公共的,所以不需要友谊。程序中的任何东西都应该是有原因的。理想情况下,每个理由都足够简单,可以用一个简单的句子来表达。
呈现
名称空间的简单句子目的是什么?2)
RenderSprite
功能?3)
Sprite
类?基于这三个答案,我能告诉你为什么
RenderSprite
是名称空间的一部分而不是类的一部分吗?