1. C 语言和 C++ 语言的区别

  1. C 语言是面向过程的语言,而 C++ 支持面向对象,所以 C 语言自然没有面向对象的封装、继承、多态等特性,也不支持面向对象的一些语法;
  2. C++ 支持函数重载,C 语言不支持;
  3. C 程序中如果函数没有任何参数需要将参数定义为 void 以此来限定函数不可传递任何参数,如果不进行限定让参数表默认为空其意义是可以传递任何参数,在 C++ 中,不带参数的函数表示函数不能传递任何参数;
  4. C 语言 struct 中不能有函数,而 C++ 语言 struct 中可以有函数;
  5. C 语言函数参数不支持默认值,而 C++ 语言支持参数默认值;
  6. C++ 语言支持内联函数,而 C 语言不支持;
  7. C++ 语言支持引用,而 C 语言不支持;
  8. C 语言采用 malloc 和 free 函数动态申请和释放内存,而 C++ 使用 new 和 delete 运算符;
  9. C 语言中只有局部和全局两个作用域,而 C++ 中有局部、全局、类、名称空间作用域;
阅读全文 »

什么是面向对象

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; }
};
阅读全文 »