C++
文章平均质量分 66
About C/C++, MFC, Qt
fengyhack
热爱IT,热爱科技,热爱自然。也爱mm.
展开
-
C++关键字final,override,default,delete
final关键字可以:将class或struct类别声明为不可继承将成员函数声明为不可重载override关键字:声明为重载若不支持重载,则无法通过编译default关键字:switch默认分支声明构造,析构为默认delete关键字:是操作符禁止生成默认函数struct Base{ virtual void foo(int); virtual void bar() final;}struct Sealed final: Base{ S原创 2021-09-13 16:36:09 · 297 阅读 · 0 评论 -
More Effective C++ Item12 抛出异常
throw obj总是会发生复制(copy constructor),复制总是以对象静态类型为本。谨慎使用throw-by-pointer,因为pointer可能指向局部对象,在离开scope时结果不可预期。try{ //... throw some_obj; // (1)}catch(Obj obj) // (2){ throw obj; // (3)}catch(Obj& obj) // (4){ th原创 2021-09-08 17:56:08 · 174 阅读 · 0 评论 -
More Effective C++ Item6 自增自减运算符重载
对于int类型变量a可以如下操作++a;a++;--a;a--;++和--分别都有前置式(操作符在前)、后置式(操作符在后)对于自定义类型,++和--的重载需要区分前置式和后置式,如下class Element{public: Element(int value) :value_(value) {} Element& operator++() { ++value_; return *this; } const Element operator++(int)原创 2021-09-08 11:17:46 · 190 阅读 · 0 评论 -
More Effective C++ Item5 警觉隐式转换
在表达式计算时可能会存在隐式转换,如下template <typename T>class Array{public: Array(int size); T& operator[](int index); T operator[](int index) const;private: //... };Array<int> a(10);Array<int> b(10);// if(a == b[1]) //原创 2021-09-06 18:13:35 · 153 阅读 · 0 评论 -
为了绕过静态检查而设置的void关键字
这个问题是前不久遗留下来的,现在已经解决了,就贴上来吧。首先我们来看一段代码int cbFxn(SOCKET s);// 在别处实现BOOL udpTransferTask(SOCKET s,UINT32 unused){ //...省略 (void)unused; // 引用1:void (void)cbFxn(s); //原创 2015-02-15 11:22:45 · 883 阅读 · 0 评论 -
VS2008+Qt4: uic, moc使用小记&两类Link错误的解决方案
关于在VS2008下使用Qt4,之前已有文章记录,该文章还给出了qmake的简单使用。这里就不再重复了,有必要的话,请点击这个链接跳转到目标内容。晕~~~外链图片看不了,点这里查看原文。以下介绍uic与moc的使用。我们以一个对话框例子为依托,依照我自己的工作步骤来讲述。1、首先,打开Qt Designer (Qt设计师),然后新建一个无按钮的对话框转载 2012-05-18 15:47:33 · 1749 阅读 · 0 评论 -
读取Bitmap(设备无关位图)数据的经典C代码
纯粹C语言读取Bitmap图像的完整示例。Bitmap文件结构分析,代码详解。示例GitHub在这里https://github.com/fengyhack/CodeSnippet/tree/Bitmapper原创 2014-12-23 16:30:05 · 3029 阅读 · 1 评论 -
TCP/UDP的Socket编程示例
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socke转载 2015-02-05 14:45:30 · 1117 阅读 · 0 评论 -
开源JPEG图像(解)压缩库libjpeg的编译与使用示例(以VS2010为例)
本文将关注IJG提供的JPEG图像压缩/解压缩库的编译与初步使用。原创 2014-12-29 17:22:07 · 5374 阅读 · 1 评论 -
如何解决Visual Studio中“多字节字符集”(MBCS)支持问题
如果你在编译时遇到这样的问题Building an MFC project for a non-Unicode character set is deprecated原创 2014-07-31 19:43:47 · 5272 阅读 · 0 评论 -
在Windows平台VS2013环境下编译Boost库
下载boost代码(此文首次编辑时,Boost的最新版本为1.57.0)需要下载请访问官网http://www.boost.org/或者SourceForge页面https://sourceforge.net/projects/boost/我下载的是boost_1_57_0.zip下载完之后解压(可以按照个人喜好设置解压路径)请保证目标位置所在磁盘有足够空间,因为编译后产生了大量的中间文件,最后将占用近2G的空间原创 2014-12-11 16:19:03 · 1931 阅读 · 0 评论 -
TCP/UDP协议的Socket编程
一、概述TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接口(datagram socket)的一种转载 2015-02-05 14:30:46 · 1306 阅读 · 0 评论 -
如何设置Visual Studio的项目和解决方案目录(环境目录:Include, Library, Executable, etc.)
貌似从VS2008版本开始,Visual Studio的后续版本在进行项目和解决方案目录设置已经被“弃用”在此之前很长一段时间,我习惯于自己添加一个props文件,但是每次这样操作感觉有些麻烦有没有一种“一劳永逸”的办法来设置【项目和解决方案的目录】,答案是“有!!!”而且这个方法很简单!原创 2014-12-11 16:44:38 · 4017 阅读 · 0 评论 -
【让你的C++程序更加高效】条款01:尽量使用常量/内联而不是预处理器/宏定义
C++程序员分为两种,一种读过《让你的C++程序更加高效》,另一种则没有Item 1: Prefer const and inline to #define.OR "prefer the compiler to the preprocessor".尽量使用const(常量)/inline(内联)而不是#defineOR "尽量依赖于compiler(编译器)而不是pr原创 2014-09-26 10:01:57 · 890 阅读 · 0 评论 -
在MFC的View窗口中显示IplImage之二
续。如果有CvvImage类最好就用这个类//IplImage* imgSrc;//HDC hDC;//CRect rect;CvvImage imgShow;imgShow.CopyOf(imgSrc,imgSrc->nChannels);imgShow.DrawToHDC(hDC,rect);在OpenCV高版本(最近好像有2.4Beta2版本了)如2.3.1没有CvvI原创 2012-05-14 21:45:08 · 1569 阅读 · 0 评论 -
在MFC的View窗口中显示IplImage之一
最近有学习OpenCV,需要将IplImage图像显示到MFC视图区,经过摸索,已经成功实现这个功能。之前在网易有发过,但是代码格式难控制。还是这一类网站的博客好一些。重写一遍吧。void CXXView::xDisplayImage(IplImage* img,HDC &hDC,CvRect &rDst,CvRect &rSrc){ int bpp=((img->原创 2012-05-14 21:35:45 · 1405 阅读 · 0 评论 -
复数(Complex)类及FFT的C++实现
===○专业造轮子○===因为一些原因需要额外编写傅里叶变换(Fourier Transform)的实现代码,而傅里叶变换需要复数的支持,因此额外编写了一个复数类。首先是复数类Complex的设计,很简单,数据域只有实部和虚部,为了方便外部操作,将数据设置为公开访问,大致如下classComplex{public: Complex();原创 2015-01-16 19:13:49 · 7611 阅读 · 7 评论 -
[20140101_Example03]动态数组创建、assert断言
#include #include using namespace std;int main(void){ int size; cout << "Input square matrix size (1-9):"; cin >> size;#ifdef _DEBUG // 请设置为Debug模式以使DEBUG宏有效 assert(1 <= size && size < 10);原创 2014-01-04 17:16:09 · 774 阅读 · 0 评论 -
[20140101_Examploe04]简单的Person类
#include #include using namespace std;class Person{public: Person(); Person(string strName); ~Person(); void Greeting(); void Goodbye(); void SendMessage(string strMessage);private: stri原创 2014-01-04 17:19:03 · 777 阅读 · 0 评论 -
[20140101_Example05(Supplication)]基本的Windows应用程序、类的继承
#include "windows.h"#pragma comment(linker,"/WinMainCRTStartup")class wRect{public: wRect(int left, int top,int width, int height); int Left() const; int Top() const; int Width() const; int原创 2014-01-04 21:53:35 · 742 阅读 · 0 评论 -
[20140101_Example02]作用域、命名空间
#include #include using namespace std;int main(void){ ::printf("DATE_TIME=%s %s\nFILE_PATH=%s, CODE_LINE=%d\nMSC_VER=%d\n", __DATE__, __TIME__, __FILE__, __LINE__, _MSC_FULL_VER); //std::str原创 2014-01-04 17:03:50 · 629 阅读 · 0 评论 -
在MFC中实现“浏览文件夹”功能
假设是对标号为ID_BTN_BRS的响应,那么这个消息响应函数可能会是这样子:void CXXClass::OnBottonBrows(void){ //选择文件夹 char szSelDir[MAX_PATH+1]; memset(szSelDir,0,MAX_PATH+1); BROWSEINFO bi; memset(&bi,0,sizeof(BROWSEINFO)原创 2012-05-14 21:53:16 · 1414 阅读 · 0 评论 -
[20140101_Example01]宏定义,预处理器指令,注释
堡垒外围:宏定义,预处理器命令,注释#ifndef THIS_HEADER#define THIS_HEADER #include // 系统路径 #include "stdio.h" // 用户路径-->系统路径#endif // THIS_HEADER//#pragma comment(linker,"/mainCRTStartup") // console程序入口点m原创 2014-01-04 16:57:11 · 662 阅读 · 0 评论 -
逐梦旅程学习笔记 Windows/GDI 示例01
此系列是学习了CSDN大神“浅墨”的《逐梦旅程》原创 2014-09-16 20:29:57 · 1165 阅读 · 0 评论 -
Windows应用程序的基本框架浅析(01)
关于Windows应用程序的基本框架原创 2014-09-17 16:50:20 · 1397 阅读 · 0 评论 -
逐梦旅程学习笔记 Windows/GDI 示例02:双缓冲贴图/绘制自由线条
继续GDi绘图,这个示例主要包括两个方面:1、双缓冲绘图2、原创 2014-09-18 15:50:48 · 1434 阅读 · 0 评论 -
【混合编程实例】C/C++调用FORTRAN编写的DLL
之前都是用C/C++写好一些公用函数并将其包装在DLL中以供某应用模块调用,这方面的教程在网络上一搜一大堆,以后再抽空在这里用实例简单地讲述一下。这次是用FORTRAN写好几个函数然后编译成DLL,然后在C语言程序中使用。1、首先是编写一段代码,这里给出一个例子! forsubs.f90! FUNCTIONS/SUBROUTINES exported from forsubs.转载 2013-02-20 15:22:33 · 3960 阅读 · 1 评论 -
有关C++模板(template)的编译错误“error LNK2019: 无法解析的外部符号”的分析
按照通常的习惯,我们原创 2014-09-15 19:49:01 · 6037 阅读 · 4 评论 -
【让你的C++程序更加高效】条款03:尽量使用new/delete而不是malloc/free
首先说明一下new/delete是C++的运算符(比如+,-,*,/等都是运算符)malloc/free是函数,在堆(heap)上分配内存/回收内存假设现在要为一个(或一组)对象分配空间,不再使用时进行内存回收,两个方面依次讨论开辟存储空间旧式malloc函数只是分配所请求大小的存储空间并返回首地址,但不做其他事情新式new操作符不仅分配存储空间而且注意到目标对象的原创 2014-09-29 11:07:57 · 944 阅读 · 0 评论 -
[20140101_Example00]月下飞VC++教程开篇
平淡的开场:神奇的代码#include "Secret.h"// 神奇的代码fengyhack once written the code执行结果揭秘Secret.h如下(据此试将上例翻译成正常代码,即替换掉所有#define语句)#include #include #define _L (#define _Y {#define _Z }#define原创 2014-01-04 16:50:23 · 791 阅读 · 0 评论