一、 C++桌面应用程序输出到控制台

// 建立输出控制台,有助于调试与排错
void UseCosoleBoard() {//----begin console output//----create consoleAllocConsole();   // 建立控制台SetConsoleTitle(_T("Debug Output"));      // 设置控制台窗口标题// 重定向 STDIN{FILE*fp;errno_t eno = freopen_s(&fp, "CONIN$", "r+t", stdin);if (eno != 0) {//不成功MessageBox(NULL, _T("重定向stdin失败!"), _T("error"), MB_OK | MB_ICONEXCLAMATION);exit(0);}}// 重定向STDOUT{FILE*fp;errno_t eno = freopen_s(&fp, "CONOUT$", "w+t", stdout);if (eno != 0) {//不成功MessageBox(NULL, _T("重定向stdout失败!"), _T("error"), MB_OK | MB_ICONEXCLAMATION);exit(0);}}//----end console output
}

二、 C++实现简单的单例模式

class Window
{public:static Window& getInstance(){static Window s_instance;return s_instance;}int Initialize(int windowWidth, int windowHeight, LPCTSTR windowTitle);void Update();void Dispatch();void Close();int IsKeyPressed(int key);int GetKeyUpEvent(int key);int shouldExit();LPVOID GetFrameBuffer();private:Window() {}; // constructorWindow(const Window&) {}; // copy-constructionWindow& operator=(const Window& right) { return *this; } // assignment-construction~Window() {}; // destructorHWND wndHandle;HDC wndDC;HBITMAP wndHandleBMP;HBITMAP wndOldtBMP;LPVOID wndFramebuffer; // framebufferint width;int height;
};Main.cpp中以及别处的调用方式int ret = Window::getInstance().Initialize(WINDOW_WIDTH, WINDOW_HEIGHT, "RenderEngine");…… ……while (!Window::getInstance().shouldExit()) {…… ……
}

三、 C++实现复杂的单例模式

Window.hclass Window
{public:static Window* getInstance(){if (m_instance == nullptr){m_instance = new Window();}return m_instance;}int Initialize(int windowWidth, int windowHeight, LPCTSTR windowTitle);void Update();void Dispatch();void Close();int IsKeyPressed(int key);int GetKeyUpEvent(int key);int shouldExit();LPVOID GetFrameBuffer();private:static Window* m_instance;Window() {};Window(const Window&) {};Window& operator=(const Window& right) { return *this; }~Window() {};class Deletor {public:~Deletor() {if (Window::m_instance != NULL) {delete m_instance;}}};static Deletor deletor; //Important!!!HWND wndHandle;HDC wndDC;HBITMAP wndHandleBMP;HBITMAP wndOldtBMP;LPVOID wndFramebuffer; // framebufferint width;int height;
};Window.cpp// 一定要在这里进行声明否则在Deletor中使用m_instance进行判断的时候链接不过
Window* Window::m_instance = nullptr;…… ……

不声明时候出错情况如下:

严重性  代码  说明  项目  文件  行   禁止显示状态
错误  LNK2001 无法解析的外部符号 "private: static class Window * Window::m_instance" (?m_instance@Window@@0PEAV1@EA) RenderEngine    C:\Users\Administrator\source\repos\RenderEngine\RenderEngine\Main.obj  1

Main.cpp中以及别处的调用方式

 int ret = Window::getInstance()->Initialize(WINDOW_WIDTH, WINDOW_HEIGHT, "RenderEngine");…… ……while (!Window::getInstance()->shouldExit()) {…… ……
}

C++基础_艾孜尔江撰相关推荐

  1. JavaScript实现令人放松的小游戏_艾孜尔江撰

    <html><head><!-- 由艾孜尔江·艾尔斯兰复现,转载或使用请注意标明出处.全程均使用鼠标交互,原游戏创作者不详,复现时有改动.使用时请在本地路径下放置一张玩家 ...

  2. 用JavaScript实现贪吃蛇游戏_艾孜尔江撰

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title>J ...

  3. JavaScript实现打砖块游戏_艾孜尔江撰

    <!DOCTYPE html> <html> <!-- 使用原生的JavaScript复现打砖块游戏:代码在复现时有所改动.--><head><m ...

  4. C++图书管理系统_艾孜尔江撰

    #include<iostream> #include<conio.h> //控制台数据输入输出的函数 #include<fstream>//文件流 #includ ...

  5. Git常用命令及其作用_艾孜尔江撰

    撤销所有本次未提交的修改(相当于Tortoise Git的revert按钮): git checkout . 恢复某个已修改的文件(撤销未提交的修改): git checkout file-name ...

  6. 从0开始配置云服务器开发环境_艾孜尔江撰

    选择云服务器系统为Cent OS最新版本或根据自己的需求选择稳定版本,并在完成部署之后从本地通过在终端中输入 ssh root@YourIPAdress 登录到服务器上,如果出现 ssh连接时提示TH ...

  7. 获取平面的法向量_艾孜尔江撰

    Vector4 GetNormalVector(const Vector4& p1, const Vector4& p2, const Vector4& p3){Vector4 ...

  8. 点与平面的距离特征_艾孜尔江撰

    点到平面距离公式 distance = Ax + By + Cz + D; //点P(x,y,z),平面的法向量n=(A,B,C),D是距原点的距离. 其中n = (A, B, C)是平面的法向量,D ...

  9. 关闭Windows更新后出现的桌面下方天气预报_艾孜尔江撰

    问题阐述 最近根据微软官方定时更新提示,更新了一下Windows 10系统,更新完之后最大的改变我感觉就是桌面右下角任务栏上出现了关于今日天气预报的相关提示,类似于任务栏上的广告.笔者不禁慨叹:&qu ...

最新文章

  1. Azure 网站的新增功能:可配置的环境变量
  2. 微软P2V工具之Disk2VHD
  3. 二分查找原理非递归与递归实现【转载】
  4. php 魔术方法 多继承,PHP通过魔术方法实现多继承与重载
  5. java多个文件压缩_java实现多个文件压缩
  6. 如何理解base href=%=basePath%
  7. java ZipEntry 压缩 解压缩 在linux下中文乱码问题解决
  8. kafka消费组查看和删除
  9. npm、cnpm的安装
  10. dspic33 怎么C语言编程,Microchip工程师社区 - dsPIC33汇编指令 - 16位MCU及DSC - 麦田论坛...
  11. 【任务中心】使用说明
  12. Android 广告秘籍
  13. 预警|使用方维、微吼等系统直播平台警惕××××××
  14. HashpMap的原理,HashMap怎样保证key的唯一性
  15. nRF52832 — 提高蓝牙BLE的数据传输速率
  16. 模拟退火算法(Simulated Annealing,SA)
  17. Node.js安装,npm安装yarn步骤
  18. delphi 控件的安装
  19. el-button自定义图片显示
  20. jupyter notebook第六章matplotlib库的一些案例分析加相关函数的解析

热门文章

  1. 收藏12个不错的配色网站
  2. 验证身份证号是否正确
  3. 空指针引用故障(空指针解引用)
  4. phoenix是什么?
  5. 斐波那契数列与黄金分割比
  6. 如何在iPad上充分利用各种笔记软件进行学习或办公——marginnote、goodnotes和onenote的优缺点以及我的使用场景
  7. python处理工资表_python3根据工资表统计人员部门变动情况
  8. 【Vue】Vuex来改写MyClassroom.vue,点击【Vuex-保存】保存教室数据-20221226
  9. JConsole远程监控配置
  10. 《缠中说禅108课》70:一个教科书式走势的示范分析