
c/c++
文章平均质量分 65
c/c++教程
Mark_md
不想做全栈的程序猿,不是一个好硬件工程师
展开
-
c/c++入门教程 - 3 职工管理系统 完整代码
基于多态的企业职工系统。2.6 职工管理系统1. 管理系统需求职工管理系统可以用来管理公司内所有员工的信息。本教程主要利用C++来实现一个基于多态的职工管理系统。公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务。经理职责:完成老板交给的任务,并下发任务给员工。老板职责:管理公司所有事务。管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:...原创 2020-09-15 15:31:34 · 3313 阅读 · 1 评论 -
c/c++入门教程 - 2.5 文件操作、fstream(write写文件、read读文件、ios::binary二进制文件读写)
2.5 文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化。C++中对文件操作需要包含头文件 <fstream>文件类型分为两种:1. 文本文件 - 文件以文本的ASC2码形式存储在计算机中。2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。操作文件的三大类:1. ofstream:写操作。(output)2. ifstream:读操作。(input)3...原创 2020-09-15 15:30:05 · 9641 阅读 · 0 评论 -
c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)
4.7 多态多态是C++面向对象三大特性之一。4.7.1 多态的基本概念多态分为两类:静态多态:函数重载 和 运算符重载属于静态多态,复用函数名。 动态多态:派生类和虚函数实现运行时多态。静态多态和动态多态区别:(超级重要)静态多态的函数地址早绑定 - 编译阶段确定函数地址。 动态多态的函数地址晚绑定 - 运行阶段确定函数地址。下面通过案例进行讲解多态:P135,没大懂。父类引用指向子类对象。总结:多态满足条件:(超级重要)有继...原创 2020-09-15 15:16:58 · 773 阅读 · 0 评论 -
c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)
4.6 继承继承是面向对象三大特性之一。有些类与类之间存在特殊的关系,例如下图中:定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。4.6.1 继承的基本语法例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同。接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处。继承的好处:减少重复代码。语法:class 子类...原创 2020-09-15 15:09:50 · 473 阅读 · 0 评论 -
c/c++入门教程 - 2.4.5 c++运算符重载(加号、左移、递增、赋值、关系、函数调用)
4.5 运算符重载运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。4.5.1 加号运算符重载作用:实现两个自定义数据类型相加的运算。...原创 2020-09-15 15:00:19 · 371 阅读 · 1 评论 -
为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量。为什么栈的大小有限制?
为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量栈区数组长度使用变量会报错。其原因就在于栈是编译器管理的,在程序运行前就已经分配好了空间的大小。而使用变量,编译器无法知道该分配多大的内存空间,于是报错。但堆上的内存是动态创建的,是在程序运行的同时为为它申请内存。(堆里的动态数组,是程序运行过程中动态申请的,而栈不一样,申请的数组长度在编译时就要确定下来,所以必须是确定的数字)也正因为栈是程序运行前就已经分配好了空间,直接编译为二进制可执行代码,运行时几乎不需要时间,所以栈的运行.原创 2020-09-12 14:20:03 · 1016 阅读 · 0 评论 -
栈的效率为什么比堆高?为什么栈的运行速度比堆快?
栈的效率为什么比堆高?为什么栈的运行速度比堆快?这里说的 “堆” 和 “栈”,并不是数据结构上的Heap跟Stack,而是程序运行中的不同内存空间。(例如C++的内存四区:代码区、全局区、堆、栈)申请速度快:栈是程序运行前就已经分配好的空间,所以运行时分配几乎不需要时间。而堆是运行时动态申请的,相当于将分配内存的耗时由编译阶段转嫁到了机器运行阶段,将分配过程从编译器搬到了运行的代码中。于是动态分配的速度不仅与分配算法有关,还与机器运行速度有关。(栈是编译时分配空间,而堆是动态分配(运行时分配空间.原创 2020-09-12 13:54:20 · 8795 阅读 · 4 评论 -
c/c++教程 - 2.4.4 友元friend用法
目录4.4 友元相关教程4.4 友元友元:友好的元素,有特殊的访问权限。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元。友元的目的就是让一个函数或者类访问另一个类中私有成员。友元的关键字为 friend。友元的三种实现:全局函数做友元 类做友元 成员函数做友元1. 全局函数做友元:// 友元class Building{public: // 全局函数做友元 // test01 全局函数是 Buildi..原创 2020-08-18 18:16:09 · 227 阅读 · 0 评论 -
c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象
目录4.3 C++对象模型和this指针4.3.1 成员变量和成员函数分开存储4.3.2 this指针概念(非常重要)4.3.3 空指针访问成员函数4.3.4 const修饰成员函数相关教程4.3 C++对象模型和this指针4.3.1 成员变量和成员函数分开存储在 C++ 中,类内的成员变量和成员函数分开存储。 只有非静态成员变量才属于类的对象上。示例:(将 Person 里的成员依次注释,看对象占用的空间大小)// 成员变量 和 成员函数 是分开存储原创 2020-08-18 18:11:04 · 203 阅读 · 0 评论 -
c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
目录4.2.7 类对象作为类成员4.2.8 静态成员相关教程4.2.7 类对象作为类成员C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员。例如:class A {}class B{ A a;}B类中有对象A作为成员,A为对象成员。那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?示例:class Phone{public: Phone(string name):m_Pname(name) { cout .原创 2020-08-18 17:49:46 · 255 阅读 · 0 评论 -
c/c++教程 - 2.4.2.6 初始化列表语法,初始化列表参数
目录4.2.6 初始化列表相关教程4.2.6 初始化列表作用:C++提供了初始化列表语法,用来初始化属性语法:构造函数(): 属性1(值1),属性2(值2)...{ }示例:传统初始化操作,有参构造函数调用:class Person{public: // 传统初始化操作 Person(int a, int b, int c) { m_A = a; m_B = b; m_C = c; } int m_A; int m_B; int原创 2020-08-18 17:38:16 · 277 阅读 · 0 评论 -
c/c++教程 - 2.4.2.5 深拷贝和浅拷贝,堆区内存重复释放
目录4.2.5 深拷贝与浅拷贝(非常重要,视频P110)相关教程4.2.5 深拷贝与浅拷贝(非常重要,视频P110)深浅拷贝是面试的经典问题。浅拷贝:简单的赋值拷贝操作。 深拷贝:在堆区重新申请空间,进行拷贝操作。浅拷贝、指针/引用 共用的时候,会出现错误。如果利用编译器提供的拷贝构造函数,会做浅拷贝操作。浅拷贝带来的问题就是堆区的内存重复释放。示例:class Person{public: Person() { cout <&l..原创 2020-08-18 17:36:52 · 526 阅读 · 0 评论 -
c/c++教程 - 2.4.2.3~4 拷贝构造函数的调用时机,构造函数调用规则
目录4.2.3拷贝构造函数的调用时机4.2.4 构造函数调用规则相关教程4.2.3拷贝构造函数的调用时机C++中拷贝构造函数调用时机,通常有三种情况:使用一个已经创建完毕的对象来初始化一个新对象。 值传递的方式给函数参数传值。 以值方式返回局部对象。示例:class Person{public: Person() { cout << "Person 无参构造函数调用" << endl; } Person(int a)...原创 2020-08-18 17:32:06 · 223 阅读 · 0 评论 -
c/c++教程 - 2.4.2.1~2 对象的初始化和清理,构造函数和析构函数,构造函数的分类和调用(有参构造,无参构造,普通构造,拷贝构造,括号法,显示法,隐式转换法,匿名对象)
目录4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用相关教程4.2 对象的初始化和清理生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全。 C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。4.2.1 构造函数和析构函数对象的初始化和清理也是两个非常重要的安全问题。一个对象或者变量没有初始状态,对其使用后果是未知的。同样的使用完一个对.原创 2020-08-18 17:28:54 · 314 阅读 · 0 评论 -
c/c++教程 - 2.4.1 类和对象,封装,class和struct的区别,成员属性设为私有,类拆分成.h.c文件编写方法
目录4. 类和对象4.1 封装4.1.1 封装的意义4.1.2 class和struct的区别4.1.3 成员属性设置为私有4.1.4类拆分成.h.c编写方法相关教程4. 类和对象C++面向对象的三大特征为:封装、继承、多态C++认为万事万物皆为对象,对象有其属性和行为。例如:人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭...车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、开空调......原创 2020-08-18 17:08:44 · 339 阅读 · 0 评论 -
c语言printf、sprintf、vsprintf用法和区别
printf、sprintf、vsprintf 通常用于格式化字符串,通俗来说就是字符串打印或显示格式转换。printf、sprintf 需要包含<stdio.h> 头文件,vsprintf 需要包含<stdarg.h>。使用下面例程,介绍他们的用法、区别和关系。我的VS2019在运行c程序时候出现点小问题,提示函数非安全。需要使用 sprintf_s、vsprintf_s。替换后,实验结果有一些不对劲。换了下平台,在树莓派上编译运行,结果正常...原创 2020-08-13 18:23:04 · 3885 阅读 · 0 评论 -
c/c++教程 - 2.3 函数的提高 函数的形参列表默认值 占位参数 函数重载
3. 函数的提高3.1 函数的默认参数C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名 (参数 = 默认值) {}// 如果没有传入参数,就使用默认值。// 如果有传入的参数,就使用传入的参数。// 语法: 返回值类型 函数名(形参 = 默认值)int func(int a, int b = 20, int c = 30){ return a + b + c;}int main() { func(10, 20); cout <原创 2020-08-06 20:41:42 · 382 阅读 · 0 评论 -
c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
2. 引用2.1 引用的基本使用作用:给变量起别名。语法:数据类型 &别名 = 原名int main() { int a = 10; // 创建引用 int& b = a; cout << "a = " << a << endl; cout << "b = " << b << endl << endl; b = 100; cout << "a =原创 2020-08-06 20:40:17 · 421 阅读 · 0 评论 -
c/c++教程 - 2.1 程序的内存模型 内存四区 代码区 全局区 堆区 栈区 new操作符
C++核心编程本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。1.内存分区模型C++程序在执行时,将内存大方向划分为4个区域- 代码区:存放函数体的二进制代码,由操作系统进行管理。- 全局区:存放全局变量、静态变量、常量(全局常量、字符串常量)。- 栈区:由编译器自动分配释放,存放函数的参数值(形参)、局部变量(局部常量)等。- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。内存四区意义:不同区域存放的数据,赋予不同的.原创 2020-08-06 20:20:04 · 252 阅读 · 0 评论 -
c/c++教程 - 总集1. c基础语法
一、代码的注释// 单行注释/* ... ... 多行注释 ... ... */#include <iostream>using namespace std;/* 多行注释 main 主函数 */int main() { cout << "Hello World!!" << endl; // 单行注释,打印输出Hello world!! system("pause"); return 0;}cout原创 2020-08-02 14:45:41 · 299 阅读 · 0 评论 -
c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数
十一、指针(1)指针的定义和使用指针的作用:可以通过指针间接访问内存。参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444已投币三连,非常好的视频教程,感谢up主的奉献。(1)指针变量的定义和使用:指针变量定义语法:数据类型 * 变量名;#include <iostream>using namespace std;int..原创 2020-07-31 11:00:56 · 158 阅读 · 0 评论 -
c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
十二、结构体(1)结构体定义和使用基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444已投币三连,非常好的视频教程,感谢up主的奉献。结构体定义和使用:语法:struct 结构体名 { 结构体成员列表 };通过结构体创建变量的方式有三种:struct 结构体名 .原创 2020-08-02 14:41:35 · 1433 阅读 · 0 评论 -
c/c++教程 - 1.8 函数 形参 实参 值传递 声明调用 函数的分文件编写
十、函数(1)函数的定义作用:将一段经常使用的代码封装起来,减少重复代码。组成:1.返回值类型:一个函数可以返回一个值。2.函数名:函数的名称。3.参数列:使用函数时,传入的数据。4.函数体语句:花括号内的代码,函数内需要执行的语句,用户代码。5.return表达式:和返回值类型匹配。函数执行完后,返回相应数据。参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=42055943503原创 2020-07-31 10:54:14 · 211 阅读 · 0 评论 -
c/c++教程 - 1.7 数组 一维数组 二维数组
九、数组数组:一个里面存放了相同类型数据元素的集合。特点:每个数组中的元素都是相同的数据类型;数组是由连续的内存位置组成的。注意:数组的下标是从0开始索引。参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444已投币三连,非常好的视频教程,感谢up主的奉献。(1.1)一维数组一维数组的三种定义方式:数据类型 数组名[ 数组长度 ];数据类型 数.原创 2020-07-31 10:50:03 · 322 阅读 · 0 评论 -
c/c++教程 - 1.6 程序流程结构 if switch do while for break continue goto ?:三目运算符
八、程序流程结构c/c++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。顺序结构:程序按顺序执行,不发生跳转。选择结构:依据条件是否满足,有选择的执行相应功能。循环结构:依据条件是否满足,循环多次执行某段代码。参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444已投币三连,非常好的视频教程,感谢up主的奉献。(1)选择结构1. 使用.原创 2020-07-31 10:45:37 · 245 阅读 · 0 评论 -
c/c++教程 - 1.5 运算符
七、运算符运算符用于执行代码的运算。运算符分类:运算符类型 作用 算术运算符 处理四则运算 赋值运算符 将表达式的值赋给变量 比较运算符 表达式的比较,并返回一个真值或假值 逻辑运算符 根据表达式的值返回真值或假值 (1)算术运算符处理四则运算。运算符 术语 示例 结果 + 正号 +5 5 - 负号 -5 5 + 加 2 + 3 5 - 减.原创 2020-07-31 10:26:28 · 267 阅读 · 0 评论 -
c/c++教程 - 1.4 数据类型 sizeof
六、数据类型(1)整形整型数据类型的区别,主要是占用空间的不同,从而导致取值范围不同,有大有小。int最为常用。数据类型 占用空间 取值范围 short(短整型) 2个字节(Byte) (-2^15 ~ 2^15-1) int(整形) 四个字节 (-2^31 ~ 2^31-1) long(长整型) windows为4个字节、32位linux为4个字节、64位linux为8个字节 (-2^31 ~ 2^31-1) long lon原创 2020-07-31 10:15:56 · 215 阅读 · 0 评论 -
c/c++教程 - 1.2 变量、常量
二、变量变量,字面意思,可以被改变的数据。而实际是给计算机的一段内存空间起名,方便操作这段内存的数据。变量如果需要被使用,需要先声明变量。声明变量的格式:数据类型 变量名 = 初始值;#include <iostream>using namespace std;int main() { int i = 100; cout << "Hello World!!" << endl; cout << "i = " << i &原创 2020-07-31 09:51:57 · 136 阅读 · 0 评论 -
c/c++教程 - 1.3 关键字、标识符命名规则
四、关键字是C++中预先保留的单词(标识符)。注意:给变量或者常量起名称时,不要和关键字重复,会有语法歧义。五、标识符(变量、常量)命名规则(1)标识符不能是关键字(2)标识符只能由 数字、字母、下划线 组成。(3)标识符的第一个字符必须是 字母或者下划线。(4)标识符中字母区分大小写可以是 inta,但不能是 int。year2020、Status、_a、Student_66 这些都符合命名规则,但 2class、618_Day 这样以 数字开头的不行。..原创 2020-07-31 10:14:05 · 446 阅读 · 0 评论 -
c/c++教程 - 1.1 代码注释
一、代码的注释代码注释常用于标注代码功能、记录作者和版本修改信息,方便阅读查看。// 单行注释/* ... ... 多行注释 ... ... */#include <iostream>using namespace std;/* 多行注释 main 主函数 */int main() { cout << "Hello World!!" << endl; // 单行注释,打印输出Hello world!!原创 2020-07-31 09:51:50 · 262 阅读 · 0 评论 -
c/c++ 实参、形参、值传递、地址传递的区别与关系 ---- 授人以鱼不如授人以渔
函数的传递过程详解:值传递:将原始对象的值传递给目标。程序会为目标开辟一个完全相同的内存空间,并将原始对象copy到目标中,之后对目标内存进行修改。所以目标的修改并不会影响原始对象,因为原始对象和目标根本是两个不同的内存空间。地址传递:将原始对象的指针传递给目标。就是把原始对象在内存中的地址传递给目标,而目标通过寻址进行操作。就是说地址传递时,原始对象和目标对应同一块内存空间,对目标进行修改,就是对原始对象的修改,两者会同时发生变化。(原始对象 -- 程序的实参。目标 -- 程序的形参)...原创 2020-07-29 15:06:50 · 1168 阅读 · 0 评论 -
常见语法错误:sizeof和strlen strlen获取指针指向的数组长度
sizeof不是函数,是一种单目运算符号,所以使用起来不用包含库。sizeof() 和 strlen()的区别着重看3.4.2的指针部分,遇到了这个,如果函数的输入变量为指针类型,改怎么获取该指针数组的长度?https://www.cnblogs.com/MasterOogway/p/5774896.html...原创 2020-06-25 16:32:17 · 908 阅读 · 0 评论 -
struct与typedef 结构体定义
结构体的基本定义方法有三种:struct 结构体名 变量名;struct 结构体名 变量名 = { 成员1值, 成员2值... };定义结构体时顺便创建变量;这三种的具体代码如下:/* ------------------ 1.struct 结构体名 变量名; 之后进行赋值操作 ------------------ */struct Student{ /* 成员列表 */ // 姓名 string name; // 年龄 int age; // 分数 in原创 2020-07-29 11:01:51 · 1069 阅读 · 1 评论 -
c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建
推荐视频课程:https://www.bilibili.com/video/BV1et411b73Z?p=2已投币三连,b站果然是个学习的网站。本来是想在linux环境下运行QT,于是先学了几个月linux嵌入式驱动开发,后来发现太底层了,与应用的联系没有那么大,还是直接搞Qt吧。Qt支持多种语言开发,QT的开源项目中,使用C++语言的工程代码最为丰富,于是先把C++过一遍。(PS:以前学一段时间c#和winform编程,可不能跨平台只能windows系统。作孽啊!!!可还好算初步了解了面.原创 2020-07-22 12:59:16 · 937 阅读 · 0 评论