首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏莫浅子的学习笔记

    C++初级项目webserver项目流程介绍(2

    一、引言 C++的webserver项目是自己在学完网络编程后根据网课的内容做的一个初级的网络编程项目。 这个项目的效果是可以在浏览器通过输入网络IP地址和端口,然后打开对应的文件目录 效果如下: 也可以打开文件夹后点击目录,打开到对应的文件夹中去。 二、代码开发流程 我这个项目主要用到的实现方式,是用epoll,epoll是可以实现网络服务器编程有下面几个优点 1. 2. 可扩展:epoll支持较大的并发连接数,可以处理成千上万个连接,而且在连接数量增加时,性能下降较慢。 3. 下面是epoll开发webserver项目的流程图(不包括具体函数的实现) int main() { //若web服务器给浏览器发送数据的时候, 浏览器已经关闭连接, //则web服务器就会收到

    1.1K10编辑于 2023-11-26
  • 来自专栏光城(guangcity)

    C++那些事之项目篇Catch2

    C++那些事之项目篇Catch2 今天推荐一个值得学习的开源项目"Catch2" ,之前写过如何使用google的googletest编写单元测试,你会发现需要编译生成lib库,比较麻烦,而Catch2 本节对应的视频教程: 任何一个大型项目都需要单元测试,那么本节就来引入项目篇之快速单元测试系列之一Catch2。 Catch2是一个功能丰富的C++测试框架,用于编写单元测试、集成测试和功能测试。 它是一个开源项目,旨在提供简洁、直观和强大的测试编写和执行体验。 使用Catch2可以轻松编写和组织测试用例,并提供丰富的断言和测试宏来验证代码的行为和预期输出。 https://github.com/catchorg/Catch2/tree/v2.13.10 Catch2支持TDD (Test-Driven Development) 和 BDD (Behavior-Driven 最后,值得一提的是Catch2 v3版本出来了,最大的变化是Catch2不再是一个单头库,因此如果想只用一个header file,就下载v2版本吧。本节完!

    77340编辑于 2023-09-02
  • 来自专栏学习成长指南

    C++继承(2

    1.如何实现一个不可以被继承的类 (1)我们上一次介绍了这个相关的构造函数和析构函数的派生类的诸多使用注意事项,我们如何实现一个不可以被继承的类呢,下面介绍两个方式; (2)第一个就是使用的我们上次介绍的这个知识 上面介绍的就是一种直接的方式,我们下面介绍一种间接的不可以被继承的方式,就是使用的C++11里面提供的一个关键字final,这个就很直接了,因为这个时候只要我们继承这个父类,这个时候编译器就会报错; 2. 继承和友元函数 (1)这个地方只需要记住一句话,就是友元函数不可以被继承,如果子类里面也想要使用这个友元函数,我们就需要把这个函数定义为子类的友元,这个也是有办法解决的; (2)友元函数不属于任何一个类 子类里面继承父类的成员变量需要使用父类的构造函数进行初始化; 4.菱形(虚拟)继承 (1)单继承和多继承 单继承就是只有一个直接父类的继承关系; 多继承就是一个类有两个及以上的直接父类的继承关系; (2) base2的起始位置,而且可以访问的空间只有base2的范围,但是这个p3指针指向的位置就是这个空间的起始位置,但是这个指针可以访问的范围就会比较大,这个模型他是都可以进行访问的,因为这个指针是一个derive

    15300编辑于 2025-02-24
  • 来自专栏coding

    C++:模板(2

    2.非类型模板参数必须在编译期就能确认结果。 以下用法是错误的,因为N不确定。 template<class T1, class T2> class Data { public: Data() { cout << "Data<T1, T2>" << endl; } private template<class T1, class T2> class Data { public: Data() { cout << "Data<T1, T2>" << endl; } private ()(a, b) << endl; //匹配偏特化 cout << boolalpha << Less<int*>()(&a, &b) << endl; 模板的分离编译 分离编译的概念 一个程序(项目 模板总结 模板的优点: 1.代码可以复用,节省资源,提高效率,便于更快迭代开发,C++标准模板(STL)因此而生。 2.代码更灵活。 模板的缺点: 1.代码膨胀,编译时间变长。

    30800编辑于 2024-11-26
  • 来自专栏c++

    c++】继承(2

    这次带来的是C++中关于继承这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 2. 菱形继承 菱形继承是多继承的一种特殊情况。 从这个点也可以看出,多继承算是c++的一个缺陷,在之后的一些编程语言里就没有多继承比如java。 多继承中指针偏移问题 接下来我们观察一段代码: class Student { public: int _b1; }; class Person { public: int _b2; }; class = &d; Assistant* p3 = &d; return 0; } p1、p2、p3都指向哪里?

    6610编辑于 2026-01-14
  • 来自专栏我的计算机成长

    C++入门(2

    ) + (y) //#define ADD(x, y) ((x) + (y)); #define ADD(x, y) ((x) + (y)) 7.1 概念 以inline修饰的函数叫做内联函数,编译时C+ 2. 类型难于拼写 2. 8.2 auto简介 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么? 指针空值nullptr(C++11) 10.1 C++98中的指针空值  在良好的 C/C++ 编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针

    30610编辑于 2024-01-23
  • 来自专栏数值分析与有限元编程

    CMake创建C++项目

    CMake是一个高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目,也就是说它最大的优势就是跨平台。 ●创建C++项目 1)在任意位置创建两个文件夹,其中一个文件夹名称为项目名称,里面有CMakeLists.txt和hello.cpp文件。另一个文件夹名称随意,里面不用添加任何东西。 ? ? ? ? 2)打开cmake的GUI界面,按照图示操作,第一个路径选择上述两个文件所在的路径,第二个路径可自行选择。完成之后点击configure ? 之后弹出一个界面,选择编译器。 然后点finish,开始配置项目 ? 3)如有红色,则再点击一次configure,直到红色消失。紧接着点击generate和open project进入vs界面。 ? 4)右击项目名称hello,将其设为启动项。编译执行。成功! ? ? 5)如果选择的编译器没有IDE,则直接在CMake里面就完成所以的步骤了。

    2.4K20发布于 2019-06-05
  • 来自专栏学习之旅

    Angularjs项目2

    原因:2016年11月23日 星期三 继Angularjs项目(1)后接着总结开发的经验与遇到的问题。 说明:本记录主要介绍bower与MVC框架。 2.文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的。 3.上传下载:这是工具的主要功能,能提高包使用的便利性。 这里为什么要提到bower呢,现在下图是通过Netbeans建立的包含Angularjs Seed文件的项目文件图: Ubuntu下Ctrl+H即可显示隐藏文件,如图中左侧,为.bowerrc文件,它的作用就是在这一级目录下使用

    90710发布于 2019-02-27
  • 来自专栏C++核心编程

    C++项目职工管理系统笔记-项目代码

    vm.exitSystem(); break; case 1: //添加职工 vm.Add_Emp(); break; case 2: *****" << endl; cout << "************* 1.增加职工信息 *************" << endl; cout << "************* 2. < endl; cin >> name; cout << "请选择该职工的岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、 //2经理 { worker = new Manager(id, name, dId); } else //总裁 { worker = new Boss(id, name, << endl; } else { cout << "请输入查找的方式:" << endl; cout << "1、按职工编号查找" << endl; cout << "2、按姓名查找

    70310编辑于 2022-09-27
  • 来自专栏C++核心编程

    C++项目职工管理系统-项目分析

    职工管理系统 1、管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C++来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工、经理、老板。 2、创建项目 创建项目步骤如下: 创建新项目 添加文件 2.1 创建项目 打开vs后,点击创建新项目,创建新的C++项目 填写项目名称以及项目路径,点击确定 2.2 添加文件 右键源文件,进行添加文件操作 至此,项目已创建完毕 3、创建管理类 ​ 管理类负责的内容如下: 与用户的沟通菜单界面 对职工增删改查的操作 与文件的读写交互 3.1创建文件 在头文件和源文件的文件夹下分别创建workerManager.h *****" << endl; cout << "************* 1.增加职工信息 *************" << endl; cout << "************* 2. cin >> choice; switch (choice) { case 0: //退出系统 break; case 1: //添加职工 break; case 2:

    1.3K20编辑于 2022-09-23
  • 来自专栏Java

    2 的幂(C++)

    2 的幂 难度简单540收藏分享切换为英文接收动态反馈 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入: n = 1 输出: true 解释: 20 = 1 示例 2: 输入: n = 16 输出: true 解释: 24 = 16 示例 3: 输入: n = 3 输出: false 示例 isPowerOfTwo(int n) { // n - 1就是把n的二进制位的最右边的那个1去掉 如果这个时候去掉了最右边的那个1 // 这个还是很妙的 如果n真的是2的幂的话

    19600编辑于 2025-01-21
  • 来自专栏番茄_C语言

    C++初阶 入门(2)

    前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 一、缺省函数 1.1什么是缺省函数 而在C++中,反而支持这种行为,这是为什么呢? 而在C++中就可以不用这么麻烦,直接float add(float a,float b);int add(int a,int b);完全不需要再去取新的名字,一个名字就搞定了,C++会自动识别参数的类型 通过图片可以看出,a是b,b也是a,b和a的本质是一样的 打印地址更是强有力的证明了我们的观点 必须重视的几点 1.引用在定义时必须要初始化 2.一个变量可以有多个引用,就像一个人可以有多个外号一样 2. 引用在定义时必须初始化,指针没有要求 3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体 4.

    35310编辑于 2024-01-19
  • 来自专栏Android点滴分享

    C++模版笔记(2)

    本篇介绍 本篇继续C++的模版介绍 std::enable_if<> enable_if<> 的作用是满足条件后可以使用模版推导,基于SFINAE(substitution failure is not

    66620编辑于 2022-10-25
  • 来自专栏学习成长指南

    C++学习~~string(2

    看看我们的这个编译器是如何进行扩容的; 我们可以发现,这个里面编译器一共是进行了4次扩容,第一次是以二倍的数量进行扩容,剩下的几次是以1.5倍的方式进行扩容的,这个是编译器决定的,例如在这个gcc编译器上面就是以2倍的方式进行扩容的 ; (2)上面的我们是使用的push_back函数插入数据,看看这个编译器是如何进行扩容的,实际上我们也是可以调用这个reserve函数进行扩容的:  我们这个时候就可以发现,我们使用reverse函数进行扩容的时候 函数是不会缩空间的,就是当我们开的空间过大的时候,他不会释放掉多余的空间,实际上就算是缩的话,代价也是很大的,因为这个缩的话也是异地进行的,就是先拷贝一份,然后在这个拷贝的缩小空间,再把原来的空间给释放掉; 2. ,经过这个at函数的加加变成了打印出来的j字符; 4.一些运算符的重载说明 (1)我们可以调用库里面的函数在这个尾部插入字符,例如我们可以调用这个append函数,push_back函数插入字符; (2) 模版的那个就是库里面提供的函数,我们使用swap(str2,str3)就会执行非成员函数,我们使用str2.swap(str3)就会执行成员函数,那个模版的库函数不会被使用到,这个也是当时设计的时候就考虑到的问题

    9400编辑于 2025-02-24
  • 来自专栏Initial programming

    初识C++ · 继承(2)

    A& pa, const B& pb); protected: int _a = 1; }; class B :public A { //public: protected: int _b = 2; Student { protected: string _seminarCourse; // 研究科目 }; void TestPerson() { Student s1; Student s2; _count) << " " << &(s2. }; class D : public B, public C { public: int _d; }; int main() { D d; d.B::_a = 1; d.C::_a = 2; 4 继承的总结和反思 在effective C++中提到,如果面临选择继承还是组合的时候,请优先选择组合,组合就是这样: class M { public: A _a; }; 也就是成员变量是其他自定义类型的

    18710编辑于 2024-10-16
  • 来自专栏ephemerals__的技术专栏

    c++】模板详解(2)

    前言 之前我们深入探讨了模板的概念、重要性及其在C++编程中的应用: 【c++】模板详解(1)-CSDN博客 通过模板,我们实现了代码的复用,并且初步理解了泛型编程。 三、模板的分离编译 首先讲讲什么是分离编译: 一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式 将声明和定义放在同一头文件当中(推荐) 2. 在定义位置进行显式实例化的声明(不推荐,很不实用) 四、模板优缺点总结 最后,我们总结一下c++中模板的优点和缺点: 优点 1. 可扩展性:模板提供了一种扩展C++语言的机制,可以通过在模板中添加特定的功能来扩展语言的能力(如STL),满足了复杂的应用需求。 缺点 1. 编译时间开销:由于模板在编译时需要实例化多个版本,增加编译时间(特别在大型项目中)。 2. 代码膨胀:模板在编译时生成大量代码,这可能会增加可执行文件的体积,占用更多的内存资源。 3.

    34510编辑于 2024-11-26
  • 来自专栏c++与qt学习

    c++文件操作2

    文本文件读取操作 读取文件操作: 1.包含头文件:#include< fstream > 2.创建流对象:ifstream ifs 3.打开文件,判断文件是否打开成功:ifs.open(“打开路径

    61610发布于 2021-02-22
  • 来自专栏莫浅子的学习笔记

    C++初级项目-webserver(1)

    项目旨在使用C++语言,基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接。 2.项目概览 这个项目的目标是实现一个简单的Web服务器,可以处理基本的HTTP请求并发送相应的HTTP响应。 项目结构包括服务器初始化、Epoll模型的使用、事件处理循环、HTTP请求处理、文件发送、错误处理等关键模块。技术和工具方面使用了C++语言、epoll模型以及socket编程。 2.  sscanf 2. 区分请求类型,处理GET请求 在得到请求类型后,服务器通常需要根据不同的请求类型采取不同的处理方式。

    85830编辑于 2023-11-19
  • 来自专栏Initial programming

    初识C++ · 多态(2)

    2 单继承与多继承中的虚函数表 2.1 单继承中的虚表 单继承中的虚表在多态(1)里面已经提及到了,这里呢就简单过一下。 ) { cout << "Base1::func2" << endl; } private: int b1; }; class Base2 { public: virtual void func1 () { cout << "Base2::func1" << endl; } virtual void func2() { cout << "Base2::func2" << endl; } private : int b2; }; class Derive : public Base1, public Base2 { public: virtual void func1() { cout << " 这里呢,是因为有两个虚表指针,一个存放在Base1 一个存放在Base2里面,有人问,为什么派生类里面没有虚表指针?

    17010编辑于 2024-10-16
  • 来自专栏Initial programming

    初识C++ · 入门(2)

    = clock(); for (size_t i = 0; i < 10000; i++) Test2(a); size_t end2 = clock(); cout << "Test1-time : " << end1 - begin1 << endl; cout << "Test2-time: " << end2 - begin2<< endl; return 0; } 我们创建一个结构体 : " << end1 - begin1 << endl; cout << "Test2-time: " << end2 - begin2<< endl; return 0; } 返回值也是一样的道理 我们遍历一个数组通常采用for的方式: int main() { int arr[10] = { 0 }; for (int i = 0; i < 10; i++) { ; } return 0; } 在C+ 以上就是C到C++引入的一些小语法,感谢阅读!

    20410编辑于 2024-10-16
领券