随笔 - 54
文章 - 0
评论 - 45
阅读 -
45万
随笔分类 - 软件编程
1
C++ 之 宏定义
摘要:宏在 C 语言中非常重要,但在 C++ 中却无甚大用,普遍的共识:尽量避免使用宏 C++ 之父 Bjarne 在《C++ Programming Language》中写到 Avoid macros 《Effective C++》 条款 2 Prefer const, enum, and inline
阅读全文
Qt 地址薄 (二) 添加地址
摘要:在上一篇 Qt 地址薄 (一) 界面设计 中,主要是实现了地址簿的界面,使用布局管理器进行元素的布局,并解释了 “子类化” 和 “所有权” 的概念。 本篇将在上面的基础上,在界面中新加三个 QPushButton 按钮,通过 “信号 - 槽函数” 机制,实现保存 Name 和 Address 内容的
阅读全文
Qt 之 qwt 和 qwtpolar 的编译配置
摘要:1 Qwt Qwt 全称为 Qt Widgets for Technical Applications,用于专业技术领域的可视化显示,如下所示: 左图为二阶系统的频率响应;中图为德国小城 Friedberg 2007年的温度统计; 右图为2012年4月,Linux 各个发行版,Debian, Min
阅读全文
Qt 之 QtConcurrent
摘要:本文以 Qt 中的 QtConcurrent::run() 函数为例,介绍如何将函数运行在单独的线程中。 1 QtConcurrent::run() QtConcurrent 是命名空间 (namespace),它提供了高层次的函数接口 (APIs),使所写程序,可根据计算机的 CPU 核数,自动调
阅读全文
Qt 地址薄 (一) 界面设计
摘要:用 Qt 实现一个地址薄,功能包括:地址的添加、浏览、编辑、查找、输出文件等。 1 界面和元素 整个地址薄界面,为 AddressBook 类。其中的两个文本框和两个编辑栏,与 AddressBook 是 “包含” 关系 (has-a),故可将它们声明为类成员数据。 1) 文本框 Name 和 Ad
阅读全文
《The Art of Readable Code》 笔记 (一)
摘要:基本原则:好的代码,能够减少 "别人" 理解它的时间。 "别人" 不仅指的是 其他人,也可能是 以后的自己 1 代码应易理解 1.1 符合习惯 下面两种形式等效,但方式2 更符合编码习惯,容易理解 // 方式 1 Node* node = list->head; if (node == NULL)
阅读全文
Qt 之 数字钟
摘要:本例展示了 QTimer 的使用,如何定时更新一个窗口部件 DigitalClock 1 QLCDNumber 类 QLCDNumber 是一种可将数字显示为类似 LCD 形式的窗口部件,它同 QLabel 一样,都继承自 QFrame,而 QFrame 继承自 QWidget 头文件 digita
阅读全文
Qt 之 饼图
摘要:Qt 有许多模块,如 Core、GUI、Widgets、WebEngine、QML等。其中 Charts 模块,包含了一系列有关图表的组件,使用的是 Qt 的 Graphics View 框架,该模块以前只在商业版中才有。 从 Qt 5.7 开始,该模块通过 GPLv3 许可,已经对 Qt 开源版开
阅读全文
Qt 之 入门例程
摘要:以 “Hello Qt” 为例,介绍如何建立一个 Qt 工程 1 QLabel 例程 QLabel 用来显示文本和图片,它继承自 QFrame (QFrame 继承自 QWidget) 1.1 Hello Qt #1 和 #2 标明头文件,也可用一个总的来代替: #include <QtWidget
阅读全文
C++ 之 基础回顾(一)
摘要:1 exe 程序 1.1 最小 cpp 程序 int main(){} // minimal cpp 思考一: 为什么最小程序没有 return 语句? 答案: 见参考资料 1.2 Hello World #include <iostream> int main() { std::cout << "
阅读全文
C++11 之 并发编程 (一)
摘要:未来芯片制造,如果突破不了 5nm 极限,则 CPU 性能的提升,可能会依赖于三维集成技术,将多个 CPU 核集成在一起,使得多核系统越来越普遍。 以前的 C++ 多线程,一是受限于平台,多借助于封装好的 APIs 来完成,例如:POSIX threads,Windows threads 等;二是受
阅读全文
Linux 之 GCC 和 GDB
摘要:1 GCC = GNU C Compiler 1) pre-processing (预处理) 2) compiling (编译) 3) assembling (汇编) 4) linking (链接) 例 hello.c gcc 编译后执行程序如下: 2 GDB 1) 进入 2) 调试 [l] 查看文
阅读全文
C++11 之 delete 和 default
摘要:1 特殊成员函数 一个类,当只有数据成员时,C98 的编译器会隐式的产生四个函数:缺省构造函数,析构函数,拷贝构造函数 和 拷贝赋值算子,称为特殊成员函数 class DataOnly { private: int data_; }; C++11 中,还有额外的两个特殊成员函数:移动构造函数 和 移
阅读全文
从引用传递到设计模式 (下)
摘要:上一篇 从引用传递到设计模式 (上) 的文末,提到非虚拟接口 NVI 的实现,即将虚函数声明为保护型或私有型,借由模板函数模式来实现 。 园友 @KillU 看的很仔细,提出了一个问题:虚函数是 private 类型,继承可以么? 答案是:可以 5 实现权和调用权 <Effective C++> 中
阅读全文
从引用传递到设计模式 (上)
摘要:1 值传递 值传递是 拷贝实参的值 传给形参,常用于“小对象” (small objects) 调用下面函数,便是值传递: 小对象一般为:内置类型(built-in types),STL迭代器,函数对象类型(function object types) 只包含一对数据(x,y) 的 Point 类,
阅读全文
C++ 之 策略模式
摘要:1 会飞的鸭子 Duck 基类中,有成员函数 Swim() 和 Display() class Duck { public: void Swim(); virtual void Display(); }; 派生类野鸭 MallardDuck,橡皮鸭 RubberDuck 和 红头鸭 RedheadD
阅读全文
C++11 之 override
摘要:1 公有继承 公有继承包含两部分:一是 "函数接口" (interface),二是 "函数实现" (implementation) 如 Shape 类中,三个成员函数,对应三种继承方式: class Shape { public: virtual void Draw() const = 0; //
阅读全文
C++ 之 重载赋值操作符
摘要:1 重载 “op=” Widget 类中,有一个 Bitmap 型指针 pb,如果重载 "=",则需考虑以下方面 class Bitmap; class Widget { private: Bitmap *pb; // ptr to a heap-allocated object }; 1.1 链式
阅读全文
C++11 之 nullptr
摘要:C++11 中,nullptr 是空指针,可用来给 (指向任意对象类型的) 指针赋值 广义整型 (integral types) = char, short, int, long, long long and their unsigned counterparts, and bool, wchar_
阅读全文
C++11 之 enum class
摘要:C++11 中,枚举的关键字为 enum class,即在 enum 后加 class,与 C++98 的 "plain" enum 区别如下: enum class Color { red, green, blue }; enum Color { red, green, blue }; 1 enu
阅读全文
1