
c++
文章平均质量分 62
慕宵子
Stay hungry , Stay foolish
展开
-
C++虚表与ABI兼容
C++类虚表中函数顺序规则 1. 从基类开始,按照申明顺序每遇到一个不是重写的虚函数,就记录在表中 2. 如果有重载,则提前重载的虚函数 3. 依次循环遍历子类,如果遇到重写,则替换相应的虚函数.........原创 2022-07-01 03:43:08 · 628 阅读 · 1 评论 -
C++函数地址
前言 本文论证了以下结论 类函数本质就是普通函数,第一个参数是类实例 func(cls*, ...) 函数地址就是模块地址(GetModuleHandle)+ 偏移量(dumpbin /exports dll.dll)得到 不包括虚函数,虚函数地址需要通过虚表获取 如果你可以获取到某个类实例地址,那么通过 GetModuleHandle + GetProcAddress 的方式可以调用第三方程序的方法 dll.h #ifndef FUNC_ADDRESS_DLL_H #define FUNC_AD原创 2021-08-31 10:10:03 · 1316 阅读 · 0 评论 -
C++ 未初始化变量引发的问题
最近在使用 CMake 重构一个 VisualStudio 项目,发现重构后的项目总是在运行期奔溃,错误发生在ffmpeg的 av_frame_clone 函数 但是经过Debug检查,确实对参数进行了赋值 没有办法,就挨个对比CMake生成的VS项目与原VS项目的配置,发现当把 SDL checks 设置为 Yes 时就可以正常运行了 经查阅 Windows文档 发现 一下明白了,可能是由于结构体未归零化,于是在构造函数中对变量m_yuvPictureDst初始化后就解决问题了。 题外话 一定要原创 2020-11-29 00:29:02 · 2596 阅读 · 0 评论 -
CMake PUBLIC / PRIVATE / INTERFACE
在使用Cmake时,经常会遇到以下两个命令 target_include_directories target_link_libraries 它们的使用方法比较类似,例如 target_include_directories(<Target> PUBLIC <dirs>… PRIVATE <dirs>… INTERFACE <dirs>… ) 那么这三种添加头文件夹的方式有什么区别呢? 假如有一个库lib,还有一个应用exe,其中exe依赖lib原创 2020-11-24 01:15:26 · 4269 阅读 · 1 评论 -
C++实例化对象易混淆总结
前段时间在写一个Qt程序,然后偶尔发现了几个问题: #include QStringList row; row.append(query.value(1).toString());原创 2017-05-15 20:13:15 · 428 阅读 · 0 评论 -
由size_t引发的思考
今天在看某个源代码文件时,突然看到一个函数:size_t Print::println(const String &s) { size_t n = print(s); n += println(); return n; }很好奇为什么不直接写成下面这样,不是更简洁吗?size_t Print::println(const String &s) { return print(s) +原创 2017-05-22 18:22:44 · 423 阅读 · 0 评论 -
QT水费管理系统 ——纯C++开发
水费管理系统——Qt制作,纯C++开发 这是一款之前开发的水费管理系统,现在开源出来给有需要的人,源代码在此 以下是此款软件的一些特性 采用sqlite3数据库 支持管理用户 支持管理水表(一户最多支持四块水表) 智能提醒未缴费项目 支持复合查询(按户主名、所在楼栋)按是否缴费查询还未实现 支持打印订单 主页添加用户界面删除用户界面管理水表页面收费页面打印订单效果收费记录页面原创 2017-09-16 14:18:20 · 1746 阅读 · 0 评论 -
父类指针访问子类私有对象
A是父类,B是A的子类,B重载了A的void foo()方法,但是B把foo()做成私有方法 A的指针指向B的实例,调用foo(),得到输出B OUT struct A { virtual void foo() { cout << "A OUT" << endl; } }; class B : public A { private: virtual void ...原创 2019-07-01 19:42:35 · 894 阅读 · 0 评论