我正在尝试找出以下问题的最佳解决方案:我有一个管理游戏图形的库(不可直接修改)。我有一个Entityclass是可显示实体的逻辑实体,由Sprite配对实例。图形库已经包含对管理Sprite集合的支持,所以我什至想将它用于逻辑而不让逻辑完全了解图形引擎(我不想包含标题),用于与遍历实体相关的所有目的(很多实体每秒需要多次更新)。为了在保留封装的同时获得这个解决方案,我想出了一个类似于这个的解决方案(我把它过度简化了):gfx_engine.h(不可修改)classSprite{...};classSpriteBatch{private:std::vectorsprites;public
好的,昨晚之后我决定改写我的问题以便于阅读。我有2个类(class),陆军和战斗组。下面是类,尽管缺少一些部分:classBattlegroups{private:battlegroupbattlegroupobject[100];public:voidAddBattleGroup();//addabattlegroupobjecttothearrayvoidremovebattlegroup();//removeabattlegroupobjectsfromthearray};classArmy{private:battlegroupsbattlegroupsobject;publi
对于一项作业,我编写了一个简单的C++程序,它使用一个父类(superclass)(Student)和两个子类(CourseStudent和ResearchStudent)来存储学生列表和打印出他们的详细信息,为两种不同类型的学生显示不同的详细信息(使用Student中的display()方法的重写)。我的问题是关于程序如何收集用户输入的信息,例如学生姓名、身份证号码、单元和费用信息(对于类(class)学生)和研究信息(对于研究生):我的实现提示用户输入并收集类本身处理的输入。这背后的原因是每个类都知道它需要什么样的输入,所以让它知道如何请求它对我来说很有意义(给定一个用于请求的os
我正在用C++编写一个库。所有类和全局函数都在mylibrary命名空间内声明。我需要创建一些仅供内部使用的类:使用这个库的人应该立即注意到哪些类不打算在库外使用。不幸的是,我不能使用私有(private)函数,因为这会弄乱所有封装。我不能使用私有(private)类,因为内部类必须由同一个库中的“普通”类访问。我想这样做的一个好方法是创建命名空间mylibrary::internal并将所有“私有(private)”内容放入其中。这是正确的方法吗?还有其他常见的方法吗? 最佳答案 为您的内部功能使用匿名命名空间。这将确保没有外部代
我刚开始学习封装,我偶然发现std::string使用的两个函数似乎破坏了它的封装。关于http://www.cplusplus.com/reference/string/string/c_str/中的c_str()和data()和http://www.cplusplus.com/reference/string/string/data/“返回的指针指向字符串对象当前使用的内部数组,用于存储符合其值的字符”。对于刚刚学习OO编程的人来说,打破封装是个好主意吗?对于更高级的人呢?顺便说一句,这似乎是与C++98不同的行为。为什么您认为他们做出了这些改变?感谢您的宝贵时间。
我正在开发一个由许多独立子系统组成的系统。其中两个子系统是Window和GraphicsAdapter子系统。GraphicsAdapter需要一个低级窗口句柄(HWND或X11窗口句柄,具体取决于操作系统),而窗口子系统是一种抽象这些操作系统特定API的方法。如果Window子系统允许访问低级API句柄,则封装很可能会被破坏。如果它允许窗口进入全屏和返回全屏,但必须触发事件警告系统有关这些更改,并且低级句柄被用来在它不知情的情况下切换到全屏怎么办?如何确保句柄从Window子系统安全地传送到GraphicsAdapter而不会被滥用,并且仍然足够灵活以允许稍后添加其他子系统(如Gra
我在下面知道usingC1::fn;会将C1中声明的fn(...)函数带到C2,但我想知道这种using在设计中?如果fn()函数不使用C1状态,我应该声明一个辅助类是更好的方法吗?如果fn函数正在使用C1状态,using是否会破坏封装?如果您能提及C++11中的一些用例,我将不胜感激。喜欢使用usingBase::Base;构造函数而不是从派生成员初始化器调用它吗?classC1{//...public:intfn(intj){...}doublefn(doublew){...}voidfn(constchar*s){...}};classC2:publicC1{//...publi
我有两个C++类:Sequence,就像std::vector和File,它是一个表示机器上文件的字符串序列。从Sequence派生File是很容易的事。它的行为完全相同,但增加了读写文件的功能。File特定的功能很容易实现,无需将Sequence的数据成员标记为protected。相反,它们可以是私有(private)的,File可以使用Sequence的公共(public)接口(interface)。到处都是快乐的时光。我想创建一个Array类,在内部管理动态分配的内存。Array对象不能调整大小;大小在构造函数中指定。*这就是事情变得有争议的地方。从概念上讲,从Array派生Se
我在EffectiveC++中遇到了这一行:Publicmeansunencapsulated,andpracticallyspeaking,unencapsulatedmeansunchangeable,especiallyforclassesthatarewidelyused.Yetwidelyusedclassesaremostinneedofencapsulation,becausetheyaretheonesthatcanmostbenefitfromtheabilitytoreplaceoneimplementationwithabetterone作者所说的“公开的就是不封
我有以下用C++编写的代码:#includeusingnamespacestd;classWindow;classLevel{intlevel;intget(Window&w);public:Level(void):level(3){}voidshow(Window&w);};voidLevel::show(Window&w){cout我想访问类Window的私有(private)成员,只能通过友元函数get访问,这也是类Level的私有(private)函数.当我尝试编译时出现错误C2248。是否可以将私有(private)函数设为其他类的友元? 最佳答案