- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
现在,在你们开始肆虐之前,让我出去。是的,我承认它实际上是为了让友元不被继承,我只是想找到一些方法来获得类似的东西。这是我的情况(没有真正的代码,只是理论)。我正在研究一个简单的抽象游戏引擎框架,起初,我只是打算采用直接的面向对象/继承方法来分解对象类型。现在,它在纸面上听起来真的很棒,将实体分成物理、动画和不动场景及其所有子类别的子类别。然而,这变得危险,难以处理完全不同的对象的困惑和相当多的危险转换,如果我错过了我需要强制执行的东西而不是编译器,这很容易导致问题,这总是一个好兆头是更好的解决方案。
因此,我提出了一种不同的抽象表示对象的方法。我希望有一个实体类,所有实体都从中派生出一个包含 vector 的实体类,或者一些其他效果最好的动态可增长数组,它将包含我称之为行为的对象。行为将在指定时间后更新,这将影响指定对象的成员。以下是一些示例。
class Force : behavior;
/*this would be a force, added to the behavior list and apply a constant
acceleration vector to the object until removed from the behavior list. (or
it's lifetime is exhausted) */
class attackThought : behavior;
/* For an ai, this would change how it reacts to a scenario by replacing or
even adding actions that it should perform given the change in position
or environment at update.*/
class animation : behavior;
/* You could create an animation, specify the animation that it is to perform,
add it to the behavior list, and during the time update, it will adjust the
vertex buffer accordingly, removing itself from the list when the animation
is done */
问题是,我想派生自一个基本行为类,它以不同的方式实现它的一些虚函数,这些函数主要改变实体对象的私有(private)成员(例如对象顶点缓冲区)。我不想操纵太多的基本实体代码,以便(在大多数情况下)可以像对待其他对象一样对待它,我只希望它们的行为完全可操纵/可推导。任何人都可以想办法让这个系统在 C++ 中工作,因为我认为它可能真的很酷:P。
顺便说一句,通过友元,我的意思是基类行为与一些派生实体类成为 friend ,这会影响它的私有(private)成员。例如,假设我有一个从实体派生的模型类,我想将一个称为动画的行为派生类作为 friend ,然后出于某种原因从模型派生一个类到更具体的对象类型,如何才能动画对象操纵这个新模型派生对象的私有(private)成员。
或者可以吗?也欢迎就此方法的可行性提出意见(只要它们确实包含批评)。
最佳答案
这些年来,我看到关于友元及其如何影响封装有两种不同的观点:
我倾向于避免使用友元并尝试解决它。我更喜欢封装所有东西,不仅仅是让它成为私有(private)的,而是能够在不影响类的用户的情况下改变它的内部实现方式。如果您希望基类能够修改派生类的属性,也许您可以考虑使用 Template Method设计模式。基类由此协调对派生类的调用方法,并确保在基类中定义通用的抽象操作方法。
至于“以防万一”将类的所有属性公开(听起来很危险),我认为最好先将它们全部设为私有(private),然后在需要时考虑将个别属性公开。
关于c++ - 世代相传的友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794586/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!