草庐IT

win_class

全部标签

c++ - 避免过多的函数参数 : class-centered or function-centered approach?

您将如何修复以下传递过多参数的错误代码?voidhelper1(intp1,intp3,intp5,intp7,intp9,intp10){//...}voidhelper2(intp1,intp2,intp3,intp5,intp6,intp7,intp9,intp10){//...}voidfoo(intp1,intp2,intp3,intp4,intp5,intp6,intp7,intp8,intp9,intp10){helper1(p1,p3,p5,p7,p9,p10);helper2(p1,p2,p3,p5,p6,p7,p9,p10);}我看到两种不同的方法:方法一:将所有函

c++ - 获取字体列表 (Win32)

我想制作一个组合框,其中列出了所有计算机已安装的字体。我不确定这是怎么做到的。我需要访问注册表才能得到这个吗?谢谢 最佳答案 您应该使用Win32API函数EnumFontFamiliesEx.您调用该函数,传递一个匹配EnumFontFamExProc类型的回调函数.EnumFontFamiliesEx找到的每种字体都会调用一次回调函数。我建议使用unicode版本(EnumFontFamiliesExW),因为我已经看到ascii版本(EnumFontFamiliesExA)对于东亚语言字体显示出一些非常奇怪的行为。链接的文章有

c++ - 虚拟功能 : Iterating over a vector<Base Class> that is populated with subclass objects

简短描述:我正在迭代一个vector,在vector中的每个对象上调用一个虚函数,以执行一系列操作。vector和迭代器一样属于基类。所有的对象都是child。当调用虚函数时,它会执行基类的函数。(真的)长描述:我正在尝试为具有一组行为的生物建模。我的基类是抽象的,只有两个函数(虚拟),所有子类都已覆盖:classBehavior{public:Behavior();~Behavior(void){}virtualvoidexecute(){}virtualBEHAVIOR_TYPEgetType(){returnm_Type;}protected:BEHAVIOR_TYPEm_Typ

c++ - 对 `typeinfo for class' 的 undefined reference 和对 `vtable for class' 的 undefined reference

这个问题在这里已经有了答案:Undefinedsymbols"vtablefor..."and"typeinfofor..."?(5个答案)关闭9年前。我正在处理C++中的继承。我想写一个程序来对两个数组进行加法和减法。这是我的代码:#include#include#includeusingnamespacestd;classroot{protected:intsize;double*array;public:virtual~root(){}virtualroot*add(constroot&)=0;virtualroot*sub(constroot&)=0;virtualistrea

c++ - 是否可以为 C++ +'s string class? And to concatenate "文字创建运算符函数?

我可以为C++的string类任意写一个operator+()函数,这样我就不用连接了字符串?例如,而不是做someVariable我可以添加一个operator+()这样我就可以了someVariable="concatenate"+"this";? 最佳答案 std::stringoperator+确实连接两个std::string。但是,您的问题是"concatenate"和"this"不是两个std::string;它们的类型是constchar[]。如果您想连接两个文字"concatenate"和"this"出于任何原因(

c++ - 从 Win32 项目中的 *.bmp 文件加载 HBITMAP

是否可以仅使用WINAPI函数将*.bmp文件加载到Win32项目中的HBITMAP中? 最佳答案 是的,只使用标准的win32库是可能的。HBITMAPhBMP=(HBITMAP)LoadImage(NULL,"Your/ImagePath/a.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);hBMP是BITMAP的句柄,您可以随意使用。注意:将NULL作为第一个参数传递很重要,来自文档:hinst[in,optional]Toloadastand-aloneresource(icon,cursor,

c++ - 为什么我们需要 C++ 中的 `class`,而 `struct` 可用于实现相同的目的?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion使用struct我们可以实现class的所有功能:构造函数(可以修改/重载)、析构函数(可以修改/重载)、运算符重载、实例方法、静态方法、public/private/protected字段/方法。那我们为什么需要class呢?注意:我不希望回答说在struct中,字段/方法默认是public。

c++ - 使用 "class "关键字声明一个变量 vs 在函数签名中声明一个没有 "class"关键字的变量

这两种方法有什么区别?有时当我遇到编译时错误提示编译器无法识别一些类类型在函数签名中,那么如果我在各自的变量前面加上关键字“class”,它总是可以解决这种编译时错误。例如,如果编译器无法识别中的Client类型voidrecv(Client*c)如果我把它改成voidrecv(classClient*c)问题解决了。很抱歉,由于我随机想到了这个问题,所以无法想出具体的例子。 最佳答案 在类型参数声明中使用关键字class、struct、enum称为详细类型说明符。它在声明函数的范围内引入新类型。它类似于前向声明。这种声明还有另一种

C++ OOP : Which functions to put into the class?

假设我有一个类a:classa{public:voidload_data();private:voidcheck_data();voidwork_data();voidanalyze_data();}这些函数都对类或其成员做一些事情。但是这个函数:boolvalidate_something(myTypemyData){if(myData.blah>0&&myData.blah与类相关,只会被它调用,所以其他地方都不需要它不对类或其成员做任何事情——只是一个小的“实用”函数在哪里放置validate_something?课内还是课外? 最佳答案

解决win11中安装的ubuntu出现“System has not been booted with systemd as init system (PID 1). Can‘t operate. ”

"Systemhasnotbeenbootedwithsystemdasinitsystem(PID1).Can'toperate."翻译过来的意思是“系统尚未以systemd作为初始系统启动(PID1)。无法操作。”(图片我放不出来,因为我已经解决问题了,把配置关了,依然能正常运行)不都多说写这篇文章的时候,手机只有10度电了,还没洗澡,以下是开始尝试解决wsl配置方面的办法1.进入配置文件cd/etc/nanowsl.conf修改如图下  Ctrl+o保存Enter按回车确认文件名称Ctel+x退出第1步排查完成,如果能正常启动那问题已经解决了。2.WSL进行版本更新(如果修改配置文件还没