C++ 实践笔记
随缘更 (~ ̄▽ ̄)~ C++11 新特性C++的发展 早期的 C++ 被称为 “C with Classes”,引入了类(Class)概念,以及构造函数、析构函数和基本的面向对象编程支持。 1983 年,“C++” 的名字首次出现,代表着比 C 更进一步,同年,第一个正式的 C++ 编译器 Cfront 诞生,这是基于 C 编译器的一个预处理器。 1998 年,C++98,成为第一个 ISO 标准版本。 2003 年,C++03,是对 C++98 的小幅修订,主要修复了细节问题。 2011 年,C++11,C++的崛起,引入了许多革命性特性。如:auto 关键字、Lambda 表达式等。 2014 年,C++14,小幅改进 C++11,增强了 Lambda 表达式和标准库。 2017 年,C++17,新增特性包括结构化绑定(Structured Bindings)、std::optional 和 文件系统支持。更关注现代开发需求,尤其是代码可读性和性能优化。 2020...
数据封装和数据抽象
数据封装所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数。 程序数据:数据是程序的信息,会受到程序函数的影响。 数据封装(Data Encapsulation)是面向对象编程(OOP)的一个基本概念,它通过将数据和操作数据的函数封装在一个类中来实现。这种封装确保了数据的私有性和完整性,防止了外部代码对其直接访问和修改。 实例1234567891011121314151617181920212223242526272829303132333435#include <iostream>using namespace std; class Adder{ public: // 构造函数 Adder(int i = 0) { total = i; } // 对外的接口 void addNum(int number) { total += number; }...
模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。 函数模板所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。模板函数定义的一般形式如下所示:12345template <typename T >返回类型 函数名 (形式参数表){ //函数体} T是一个占位符类型,可以用任何合法的标识符替代。 T在函数体中表示实际类型,会在调用时被推导或显式指定。 返回类型和参数列表可以使用模板类型T。 模板可以有多个参数,用逗号分隔。template<typename T1,typename T2>, 但是定义了就要用,不用会报错。 实例:123456789101112131415161718192021222324252627#include <iostream>#include <string>using...
命名空间
命名空间是一个封装机制,用于将标识符(如变量、函数、类等)组织在一起。这样同名的标识符可以出现在不同的命名空间中,避免名称冲突。本质上,命名空间就是定义了一个范围。 定义命名空间命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:123namespace namespace_name {// 代码声明} 访问命名空间命名空间中的代码可以通过以下两种方式访问: 使用作用域解析运算符::如下所示:1name::code; // code 可以是变量或函数实例1234567891011121314151617181920212223242526#include <iostream>using namespace std; // 第一个命名空间namespace first_space{ void func(){ cout << "Inside first_space" << endl; }}// 第二个命名空间namespace...
多态
多态 (Polymorphism) 是面向对象编程中的一个重要特性,它允许同一个操作或函数在不同的情况下有不同的表现方式。C++中的多态分为静态多态和动态多态。 静态多态静态多态是在编译时决定调用哪个函数或操作,它主要通过函数重载和运算符重载实现。 函数重载函数重载是指在同一作用域内,可以定义多个同名函数,但它们的参数列表(参数类型、参数个数、参数顺序)必须不同。编译器在编译时根据函数调用时的参数列表来确定调用哪个函数。12345678910111213141516171819#include <iostream>using namespace std;class Math {public: int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; }};int main() { Math math; cout...
自动控制理论(经典控制)
控制系统的基本要求稳、快、准 稳定性:稳定性是控制系统的基本要求之一,指的是在受到扰动或输入变化时,系统能够回归平衡状态。 快速性:指系统从输入变化到输出稳定所需的时间,通常通过响应速度和过渡时间来衡量。 精确性:...
关于控制器的设计
...
类和对象
在 C++ 中,类和对象是面向对象编程(OOP)的核心概念。类是一个用户定义的数据类型,它封装了数据和对数据的操作。对象则是类的实例。 类和对象类的定义 定义一个类需要使用关键字classs,然后指定类的名称,并且类的猪蹄是包含在一对花括号中,主体包含类的成员变量和成员函数。12345678910111213141516171819202122#include <iostream>class Car {public: // 公有成员函数 void setBrand(std::string b) { brand = b; } void setModel(std::string m) { model = m; } void displayInfo() { std::cout << "Brand: " << brand <<...
Hexo文章保存为草稿
正常新建文章一般我们会使用hexo new 文章标题来新建文章,这样新建的文章会生成在 source/_posts 目录下,使用hexo d命令会将文章直接发布到博客上。当我们同时写几篇文章或者为后续做计划时,并不希望立即发布 新建文章草稿需要先保存文章,再进行修改时,我们可以使用hexo new draft 文章标题来新建文章,这样新建的文章会生成在 source/_drafts 目录下,使用hexo d命令会将文章保存为草稿,不会发布到博客上。 预览草稿当我们需要预览草稿时,可以使用hexo s命令来启动本地服务器,然后访问http://localhost:4000来预览草稿。 发布草稿当我们需要发布草稿时,可以使用hexo p 文章标题命令来发布草稿,这样新建的文章会生成在 source/_posts 目录下,使用hexo d命令会将文章发布到博客上。后续我们可以手动将source/_drafts目录下的文章移动到 source/_posts 目录下,使用hexo d命令将文章发布到博客上。 删除草稿当我们需要删除草稿时,可以使用hexo delete draft...
hexo博客图片加载不出来的解决方案
问题描述使用Markdown在写博客的时候,插入图片,在本地可以看到,但在网页上图片加载不出来,如下图所示。 解决方案 在博客根目录git bash输入命令:npm install hexo-asset-image --save 将_config.yml文件中的post_asset_folder: false改为true此时使用hexo new "文章名"命令创建文章时,会在source/_posts文件夹下创建一个与文章同名的文件夹,将图片放入该文件夹中,然后在文章中使用的方式引用图片,即可在网页上正常显示图片。