C++ 就该这么学
文章平均质量分 88
如果你会C语言,想学习C++,这里是你的一个不错的选择。 获取源代码 https://github.com/gaowanlu/note 在线文档 https://gaowanlu.gitbook.io/
高万禄
一个菜鸡
展开
-
【C++】为什么C++有时候构造的类对象的成员变量没有被默认初始化
如果变量是一个静态的局部变量,或者是一个全局变量(包括全局静态变量),则会被默认初始化为其类型的默认值。例如,整型变量将被初始化为0,浮点型变量将被初始化为0.0,指针变量将被初始化为nullptr,而对象将被调用默认构造函数。需要注意的是,C++11之前,如果变量是一个非静态的局部变量,且未进行初始化,则其将不会被默认初始化,其值是未定义的。因此,在定义变量时,最好显式地进行初始化,以确保其值是可预测的。如果变量是一个非静态的局部变量,且未进行初始化,则其将不会被默认初始化,其值是未定义的。原创 2024-03-13 17:40:02 · 399 阅读 · 0 评论 -
C++服务器 支持http、tcp protobuf、websocket,linux开源框架 零依赖轻松编译部署 Reactor
C++服务器 支持http、tcp protobuf、websocket,linux开源框架 零依赖轻松编译部署 Reactor原创 2023-12-04 01:33:52 · 317 阅读 · 0 评论 -
C++内存字节对齐与位域【你可能不知道的C++】
如果你是一位嵌入式工程师可能会更熟悉,类或结构体可以将非静态数据成员定义为位域,每个位域含有一定的二进制位,通常用于串口通信等,位域在内存的布局与机器相关。6、如果相邻位域字段的类型相同,且其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;5、如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;上面有学习过结构体中的字节对齐问题,那么含有位域的结构体的内存对齐情况又是怎样的呢?原创 2022-10-26 01:46:20 · 1019 阅读 · 0 评论 -
第20章 接口手册【C++】
ABCDEFGHILMOPQRSTUVW算法接口在泛型编程中我们接触到了标准库中的算法,指示了解了算法的特性,并没有对其接口深入了解,下面是常见算法的使用方式及其接口1、beg和end表示元素范围的迭代器,算法对一个由beg和end表示的序列进行操作2、beg2,end2是表示第二个输入序列开始和末尾位置的迭代器如果没有end2则表示第二个序列和第一个序列长度相同。beg和beg2的类型可以不匹配,但需要保证对两个序列中的元素都可以执行特定操作或调用给定的可调用原创 2022-08-10 00:34:32 · 743 阅读 · 0 评论 -
第19章 特殊工具与技术【C++】
到此你会感觉C++越来越离谱,不好好想着解决问题,语法与特性先成为了一大问题。只能说太复杂了,上手难度较高。本章分别从,控制内存分配、运行时类型识别、枚举类型、类成员指针、嵌套类、union联合体、局部类、不可移植的特性,入手进行学习太离谱了吧,new与delete还能重载!先回顾一下new与delete,下面使用到了多维数组的内存动态分配,在C++中new与delete就相当于C中的malloc与free函数当用户自定义了new与delete 的operator,则有限使用自定义的,没找到则将寻找new原创 2022-08-09 23:01:55 · 373 阅读 · 0 评论 -
第18章 用于大型程序的工具【C++】
关键词namespace,随后为命名空间的名称,然后为花括号。花括号内主要包括,类、变量(及其初始化操作)、函数(及定义)、模板、其他命名空间publicintage;}};mefunc();num);}要注意的是,命名空间作用域后面无须分号与类的声明定义规范非常相似publicintnum;};}print(){A}完全允许在namespace作用域外定义命名空间成员,但是要显式指出命名空间}voidAprint(){...原创 2022-08-01 14:36:31 · 781 阅读 · 0 评论 -
第17章 标准库特殊设施【C++】
如果你已经从第一章按部就班的学到了第17章,我相信你所认识的C++知识已经超过了很多人,因为有学习的同学并没有耐心慢慢全面地学完C++11的全部知识,从17章 标准库特殊设施以及第18章 用于大型程序的工具、第19章 特殊工具与技术这三个单元被统称为高级主题,这些内容往往在大型工程中意义重大首先介绍本章整体内容,tuple类型、bitset类型、正则表达式、随机数、进一步深入IO操作tuple与pair有些类似,但是tuple支持多个元素,多种元素类型,在希望将一些数据组合成单一对象,但不想麻烦地自定义数原创 2022-07-27 01:08:31 · 273 阅读 · 0 评论 -
第16章 模板和泛型编程【C++】
已经学习了标准容器,我们就会产生好奇,为什么它可以存储任意类型呢?向自定义的函数的形参与实参都是有着严格的类型匹配,面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况,不同之处在于,OOP能处理类型在程序运行之前都未知的情况,而泛型编程中,在编译时就能获知类型了,在OOP总我们知道利用虚函数与动态绑定机制可以做到有时某种算法的代码实现是相同的,只有变量类型不同,如下面的情况泛型编程就是为解决这种问题而生的函数模板就是一个公式,可以来生成针对特定类型的函数版本编译器生成的版本通常被称为模板的实例原创 2022-07-20 17:28:02 · 449 阅读 · 0 评论 -
第15章 面向对象程序设计【C++】
学习本章将会得到,面向对象程序设计的三个基本概念,数据抽象、继承、动态绑定(多态)通过使用数据抽象,我们可以将类的接口与实现分离;使用继承可以定义类似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略类似类型的区别,而以统一的方式使用它们通常在层次关系的根部有一个基类即被继承的类,其他类则直接或简介地从基类继承而来,这些继承得来的类称为派生类动态绑定在有些地方下面的这种操作叫做面向对象里面的多态,在此我们暂且称其为动态绑定定义基类上面出现的新事物为派生类要通过使用类派生列表指定从那原创 2022-07-09 11:11:28 · 236 阅读 · 0 评论 -
第14章 操作重载与类型转换【C++】
C++语言定义了大量运算符以及内置类型的自动转换规则,当运算符被用于类类型的对象时,C++语言允许我们为其指定新的含义,但无权发明新的运算符号可以被重载的运算符例重载+运算符的某些运算符不应被重载例如取址运算符与逗号运算符,它们本就有它们的存在的意义,重载它们使得规则变得混乱,一般来说它们不应被重载而逻辑与、逻辑或涉及到短路求值问题,通常情况下,不应重载逗号、取地址、逻辑与、逻辑或运算符重载运算符得返回类型通常情况应该与其内置版本得返回类型兼容:逻辑运算符和关系运算符返回bool、算数运算符返回一个类原创 2022-07-02 11:13:15 · 269 阅读 · 0 评论 -
第13章 拷贝控制【C++】
从此章我们即将开始第三部分的学习,之前我们已经学过了两个部分,C++基础和C++标准库,第三部分为类设计者的工具也就是我们即将开始传说中的对象对象编程之旅,面向对象程序设计(Object Oriented Programming)本章进行学习类如何操控该类型的拷贝,赋值,移动或者销毁,有:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符以及析构函数等重要知识定义:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是构造拷贝函数简单上手合成拷贝构造函数默认情原创 2022-06-25 13:33:50 · 721 阅读 · 0 评论 -
第12章 动态内存【C++】
动态内存的动态体现在哪里,还要从我们前面所知道的全局变量,局部变量,以及static变量进行对比,全局变量的生命周期横穿整个程序运行时知道程序运行结束,局部变量随着调用栈上下文的离开进行释放,static初始化在第一次被运行时变量被定义,知道程序运行结束才释放,而动态内存就是编码人员手动显式的申请的内存,只有显式地进行释放才会被释放,否则知道程序运行结束C语言也有动态内存,而其也是一件非常危险地是事情,经验不足的开发人员可能编码造成内存泄露。在C++中,标准库定义了两个智能指针类型来管理动态分配的对象,当一原创 2022-06-21 13:42:11 · 377 阅读 · 0 评论 -
第11章 关联容器【C++】
与顺序容器不同的是,关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,那么典型的就是我们常见的map与set数据结构map类型通常被称为关联数组使用set定义关联容器当定义一个map时,必须指明关键字类型与值类型,而定义set只需指明关键字类型空容器、列表初始化、映射键值对列表初始化初始化multimap与multisetmulti的意义就是,map一个关键词可以存储多个值,set也可以存储多个相同的值关键字类型要求对于有序容器,map、m原创 2022-06-15 17:22:42 · 200 阅读 · 0 评论 -
第10章 泛型算法【C++】
标准库为我们提供了容器,同时为开发者提供了许多算法,这些算法中大多数都独立于任何特定的容器,也就是说这些算法是通用的(generic,或者称为泛型的):它们可用于不同类型的容器和不同类型的元素,本章主要学习泛型算法与对迭代器更加深入的讨论大多数算法在头文件,中定义了一组数值泛型算法下面简单使用find算法可见迭代器令算法不依赖于容器、不同的容器可以使用相同的算法算法依赖于元素类型的操作,如find就依赖于元素类型间的==操作,其他算法可依赖>、...原创 2022-06-10 15:34:44 · 289 阅读 · 0 评论 -
第9章 顺序容器【C++】
第9章 顺序容器顺序容器为开发者提供了控制元素存储和访问顺序的能力,顺序不依赖元素的值,而是元素加入元素容器时的位置相对应顺序容器概述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y2e3fN9h-1653549026113)(./img/屏幕截图%202022-05-26%20114318.jpg)]如list、forward_list是链式存储结构,而vector、deque、array、string为顺序存储结构,在增删改等操作上它们会有不同的特性构造函数默原创 2022-05-26 15:10:37 · 528 阅读 · 1 评论 -
第8章 IO库【C++】
第8章 IO库在本章我们只是大致了解C++中的IO库,了解相关的stream类的使用以及它们的特性与概念,关于文件操作更详细的细节将会再后面进行学习,在此不必过分要求自己必须掌握文件操作,总之与我们在此学的是C++对IO的一些封装C++中不直接处理输入输出,而是通过一系列定义在标准库中的类型处理IO,这些类型支持从设备读取数据,向设备写入数据的IO操作,设备可以是文件,控制台窗口等还有一些类型允许操作内存IO,即从string读取数据,向string写入数据我们已经接触了istream输入流类型,原创 2022-05-26 15:09:39 · 1673 阅读 · 0 评论 -
第7章 类【C++】
类的基本思想是数据抽象和封装,数据抽象是一种依赖于接口和实现分离的编程技术。封装实现了类的接口和实现额分离,封装后的类隐藏了它的实现细节。类要想实现数据抽象和封装,需要首先定义一个抽象数据类型。C语言中没有类的概念,但是有struct结构体供我们定义抽象的数据类型,但是本身不支持封装、以及类方法。如果结构体大小是定长时,结构体的实例内部内存是连续的,那么则会有许多的用途,比如串口协议等。方法、thisthis的数据类型就是,Person*,他是一个相应类数据类型的常量指针我们发现刚刚的成员函数的代原创 2022-05-17 10:50:56 · 210 阅读 · 0 评论 -
第6章 函数【C++】
第6章 函数在前面我们已经使用过定义main函数,以及也见过其他的自定义函数,函数是一个命名了的代码块,我们通过调用函数执行相应的代码,函数可以有0个或多个参数,而且通常产生一个结果,C++可以重载函数,也就是说,同一个名字可以对应几个不同的函数函数基础函数的实参的类型要与函数的形参类型匹配,后者实参赋值给形参可以进行类型转换。//example1.cpp#include <iostream>using namespace std;//编写函数 返回类型为intint doub原创 2022-05-11 09:23:53 · 347 阅读 · 0 评论 -
第5章 语句【C++】
C++ 中的大多数语句都已分号结尾,如果编码人员忘记,则会在编译时报错空语句就是什么也不做的语句,同理也是以分号结尾关于分号分号我们漏写会报错,多写了则会将多的当做空语句处理,总之不要多写也不要少些,以免出现逻辑上的BUG,往往是难以寻找的复合语句块复合语句是指用花括号括起来的语句和声明的序列,复合语句也被称作为块,在函数、for、if、while、switch等语句都会使用到{}块不以分号作为结束语句作用域可以在块内定义变量,定义在控制结构当中的变量只在响应语句的内部可见,一旦跳出此语句,变量原创 2022-05-07 11:27:55 · 316 阅读 · 0 评论 -
第4章 表达式【C++】
什么是表达式?我可以简单地认为是需要运算的式子,官方的解释为表达式由一个或多个运算对象组成,对表达式求值将得到一个结果,字面值和变量是最简单的表达式,其结果就是字面值和变量的值。...原创 2022-04-28 21:41:05 · 1250 阅读 · 0 评论 -
第3章 字符串、向量和数组【C++】
字符串、向量和数组【C++】、命名空间的using声明、头文件不应含using声明、标准库类型string、定义和初始化string对象、string对象上的操作、getline函数的返回值、std::string::size_type类型、字符串相加要注意的事、处理string对象中的字符、遍历字符串字符、下标的随机访问、标准库类型vector、定义和初始化vector、向vector内添加元素、vector其他操作、遍历vector、不能用下标的形式添加元素...原创 2022-04-22 22:36:20 · 1317 阅读 · 0 评论 -
第2章 变量和基本类型【C++】
第2章 变量和基础类型基本内置类型算术类型标识符 含义 大小bool 布尔类型 未定义大小char 字符 8位wchar_t 宽字符 16位char16_t Unicode字符 16位char32_t Unicode字符 32位short 短整形 16位int 整形 16位long 长整形 32位long l原创 2022-04-19 01:11:36 · 1200 阅读 · 0 评论 -
第1章 开始【C++】
第1章 开始简介C++是C的超集、通俗的说可以在C++程序内写C语言代码,而在C程序内不能使用C++的特性、可见C++有很大的包袱,背负着许多的任务。如果您没有学习过C语言那么则可以在学习过C++后然后学习C与C++的对比,如果学习过C语言也会使得学习C++非常快。编写一个最简单的C++程序//example1.cppint main(){ return 0;}C++的程序入口为main函数,会从执行main函数内的代码开始我们的程序,main函数返回的内容必须为int类型如何编译原创 2022-04-19 01:10:17 · 936 阅读 · 0 评论