什么是面向对象

1. 面向过程思想

完成一个需求的步骤:首先是搞清楚要做什么,然后再分析怎么做,最后再通过代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,从而完成需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。 面向过程编程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能函数相互调用,完成需求;

阅读全文 »

众所周知QIntValidator和QDoubleValidator存在缺陷,最明显的一点就是数据范围不准确。

1
auto intVaildator = new QIntValidator(1,199); // 实际可以输入(0,999)
阅读全文 »

1.Build

Ninja配置方法在下面

1.CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cmake_minimum_required(VERSION 3.16)

project(Qt-Examples VERSION 0.1 LANGUAGES CXX)

list(APPEND CMAKE_PREFIX_PATH "C:\\Qt\\6.6.2\\msvc2019_64")

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
#qt_standard_project_setup() 这个识别不了

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 COMPONENTS Widgets REQUIRED)

add_subdirectory(Battery)
阅读全文 »

一般的non-blocking网络框架都会有两块应用层缓冲区Buffer:输入和输出。

防止卡在write和read处,损失性能,异步处理。

  1. write:没必要非写完缓冲区的所有数据(需要等待TCP缓冲区可写),可以多发送几次;
  2. read:没必要每次都要读到一个完整的数据包分割处,或者读到撑爆缓冲区;

由于缓冲区的存在,势必需要控制缓冲区大小,便有了高水位回调和低水位回调这种流量控制方案。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Mutex
{
DISABLE_COPY(Mutex)
public:
Mutex() {}
~Mutex() {}

void lock()
{
while (m_atomic_flag.test_and_set(std::memory_order_acquire)) {
// 有这一行 ? 互斥锁:自旋锁;
// std::this_thread::yield();
}
}

void unlock() { m_atomic_flag.clear(std::memory_order_release); }

private:
std::atomic_flag m_atomic_flag;
};
阅读全文 »

优势

  1. 一个调用者想创建一个对象,只要知道其名称就可以了;
  2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以;
  3. 屏蔽产品的具体实现,调用者只关心产品的接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
class Factory
{
public:
Factory() {}
virtual ~Factory() { std::cout << "~Factory" << std::endl; }
// This virtual is very important
// If you don't have this virtual, try this code
// Factory *f = new ComputerFactory;
// delete f;
// ComputerFactory's destructor will not be called, causing a memory leak

virtual void name() { std::cout << "Factory" << std::endl; }
};
阅读全文 »

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
观察者模式又叫做发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式。

阅读全文 »