【C++】
玛丽奥ZJY
这个作者很懒,什么都没留下…
展开
-
C++/C项目
几个C++/C语言编写的项目:cjson网址:https://sourceforge.net/projects/cjson/MyTinySTL网址:https://github.com/Alinshans/MyTinySTLoatpp网址:https://github.com/oatpp/oatppTinyhttpd网址:https://github.com/EZLippi/Tinyhttpd/blob/master/httpd.cnginx网址:http://nginx.org/Redis网原创 2020-11-30 09:36:27 · 698 阅读 · 0 评论 -
第十四课 进阶面向对象(下)---狄泰学院
第十四课 进阶面向对象(下)1.面向对象基本概念类之间的基本关系继承从已存在类细分出来的类和原类之间具有继承关系(is-a)继承的类(子类)拥有原类(父类)的所有属性和行为组合一些类的存在必须依赖于其它的类,这种关系叫组合组合的类在某一局部上由其它的类组成类之间的基本关系-继承类之间的基本关系-组合类的表示法类的表示法-简化类的表示法-改进1类的表示法-改进2类的表示法-改进3类的表示法-改进414-1 类的表示法#include <stdio.h>转载 2020-09-22 14:45:54 · 97 阅读 · 0 评论 -
第十三课进阶面向对象(上)---狄泰学院
第十三课 进阶面向对象(上)你考虑过吗?日常生活中,我们都习惯于对事物进行分类。那么,这种分类的思想是够可以引入程序设计中呢?是的1.面向对象基本概念面向对象的意义在于将日常生活中习惯的思维方式引入程序设计中将需求中的概念直观的映射到解决方案中以模块为中心构建可复用的软件系统提高软件产品的可维护性和可扩展性类和对象是面向对象中的两个基本概念类:指的是一类事物,是一个抽象的概念对象:指的是属于某个类的具体实体类是一种模型,这种模型可以创建出不同的对象实体对象实体是类模型的一个转载 2020-09-22 14:42:59 · 72 阅读 · 0 评论 -
第十二课 经典问题解析一---狄泰学院
第十二课 经典问题解析一1.关于const的疑问const什么时候是只读变量?什么时候是常量?const常量的判断准则只有用字面量初始化的const常量才会进入符号表—真正意义上的常量使用其他变量初始化的const常量仍然是只读变量—只读变量被volatile修饰的const常量不会进入符号表(外部:多线程、中断)—只读变量在编译期间不能直接确认初始值的const标识符,都被作为只读变量处理。const引用的类型与初始化变量的类型相同:初始化变量称为只读变量不同:生成一个新的只读变量转载 2020-09-22 14:41:31 · 95 阅读 · 0 评论 -
第十一课 新型的类型转换---狄泰学院
第十一课 新型的类型转换1.强制类型转换C方式的强制类型转换(Type)(Expression)Type (Expression)—老式类型11-1 粗暴的类型转换#include <stdio.h>typedef void(PF)(int);struct Point{ int x; int y;};int main(){ int v = 0x12345; PF* pf = (PF*)v; char c = char(v);转载 2020-09-22 14:23:59 · 125 阅读 · 0 评论 -
第十课 C++中新成员---狄泰学院
第十课 C++中的新成员1.动态内存分配C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的delete关键字用于内存释放10-1 C++中的动态内存分配#include <stdio.h>int main(){ int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p =转载 2020-09-22 08:47:47 · 119 阅读 · 0 评论 -
第九课 函数重载分析(下)---狄泰学院
第九课 函数重载分析(下)1.重载与指针下面的函数指针将保存哪个函数的地址?第一个函数重载遇上函数指针将重载函数名赋值给函数指针时1.根据重载规则挑选与函数指针参数列表一致的候选者2.严格匹配候选者的函数类型与函数指针的函数类型9-1 函数重载VS函数指针#include <stdio.h>#include <string.h>int func(int x){ return x;}int func(int a, int b){ r转载 2020-09-22 08:30:58 · 71 阅读 · 0 评论 -
第八课 函数重载分析(上)---狄泰学院
第八课 函数重载分析(上)1.自然语言中的上下文你知道下面词汇中“洗”字的含义吗?结论:能和“洗”字搭配的词汇有很多“洗”字和不同的词汇搭配有不同的含义2.重载的概念(Overload)同一个 标识符在不同的上下文有不同的意义如:“洗”和不同的词汇搭配后有不同的含义洗衣服,洗脸,洗脑。。。“play”和不同的单词搭配后有不同的含义play chess,play paino,play basketball,…3.思考:重载在自然语言中是随处可见的。那么程序设计中是否也有重载呢?转载 2020-09-22 08:22:44 · 109 阅读 · 0 评论 -
第七课 函数参数的扩展---狄泰学院
第七课 函数参数的扩展1.函数参数的默认值C++中可以在函数声明时为参数提供一个默认值当函数调用时没有提供参数的值,则使用默认值参数的默认值必须在函数声明中指定问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的参数默认值不同时会发生什么?7-1 默认参数值初探#include <stdio.h>int mul(int x = 0);int main(int argc, char *argv[]){ printf("%d\n", mul());转载 2020-09-22 08:16:00 · 103 阅读 · 0 评论 -
第六课 内联函数分析---狄泰学院
第六课 内联函数分析1.C++中的const常量可以替代宏常数定义如:const int A = 3; <–> #define A 3C++中是否有解决方案替代宏代码片段呢?有,内联函数2.内联函数C++中推荐使用内联函数替代宏代码片段C++中使用inline关键字声明内联函数inline int func(int a, int b){return a< b ? a: b;}内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接转载 2020-09-22 08:10:18 · 74 阅读 · 0 评论 -
第五课 引用的本质分析---狄泰学院
第五课 引用的本质分析1.引用的意义引用作为变量别名而存在,因此在一些场合可以代替指针引用相对于指针来说具有更好的可读性和实用性swap函数的实现对比:void swap (int& a, int& b){int t = a;a = b;b = t;}void swap(int* a, int* b){int t = *a;*a = *b;*b = t;}注意:函数中的引用形参不需要进行初始化!!!2.特殊的引用const引用转载 2020-09-21 23:59:59 · 106 阅读 · 0 评论 -
第四课 布尔类型和引用---狄泰学院
第四课 布尔类型和引用1.布尔类型C++中的布尔类型C++中的C语言的基本类型系统之上增加了boolC++中的bool可取的值只有true和false理论上bool只占用一个字节注意:true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示2.布尔类型的值bool类型只有true(非0)和false(0)两个值C++编译器会将非0值转换为true,0值转换为false下面的代码输出什么?0,1,1 0(false), 1(true), -2(true)转载 2020-09-21 23:48:55 · 197 阅读 · 0 评论 -
第三课 进化后的const分析---狄泰学院
第三课 进化后的const分析1.C语言中的constconst修饰的变量是只读的,本质还是变量const修饰的局部变量在栈上分配空间const修饰的全局变量在只读存储区分配空间const只在编译期有用,在运行期无用const修饰的变量不是真的常量,它只是告诉编译期该变量不能出现在赋值符号的左边。C语言中的const使得变量具有只有只读属性const将具有全局生命周期的变量存储于只读存储区const不能定义真正意义上的常量!enum可以,枚举3-1.cpp C/C++中的const转载 2020-09-21 23:41:19 · 95 阅读 · 0 评论 -
第二课 C到C++的升级---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二课 C到C++的升级1.C与C++的关系C++继承了所以的C特性C++在C的基础上提供了更多的语法和特性C++的设计目标是运行效率和开发效率的统一2.C到C++的升级C++更强调语言的实用性,所有的变量都可以在需要使用时定义int c = 0; for(int i=1; i<=3; i++) { for(int j=1; j<=3; j++) { c +转载 2020-09-21 23:35:14 · 105 阅读 · 0 评论 -
第一课 学习c++的意义---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++的意义1.背景知识Unix操作系统诞生之初是直接用汇编语言写成的,随着Unix的发展,汇编语言的开发效率成为一个瓶颈,如何提高Unix的开发效率?1971年,Ken Thompson和Dennis Ritchie对B语言进行了改良,使其能够直接产生机器码,C语言诞生,Unix开始用C语言重写,同时C语言在实践的过程中得到发展。2.C语言的特点C语言是在实践的过程中逐渐完善起来的没有深思熟虑的设计过程残留量过转载 2020-09-21 23:12:07 · 155 阅读 · 0 评论 -
C++ 控制结构和函数(二) —— 函数I(Functions I)
通过使用函数(functions)我们可以把我们的程序以更模块化的形式组织起来,从而利用C++所能提供的所有结构化编程的潜力。一个函数(function)是一个可以从程序其它地方调用执行的语句块。以下是它的格式: type name ( argument1, argument2, ...) statement 这里:type 是函数返回的数据的类型name 是函数被调用时使用的名argument ...转载 2018-03-20 10:49:56 · 193 阅读 · 0 评论 -
C++ 控制结构和函数(三)—— 函数II(Functions II)
参数按数值传递和按地址传递(Arguments passed by value and by reference)到目前为止,我们看到的所有函数中,传递到函数中的参数全部是按数值传递的(by value)。也就是说,当我们调用一个带有参数的函数时,我们传递到函数中的是变量的数值而不是变量本身。 例如,假设我们用下面的代码调用我们的第一个函数addition :int x=5, y=3, z;z =...转载 2018-03-20 10:56:00 · 205 阅读 · 0 评论 -
C++ 高级数据类型(一)—— 数组
数组(Arrays) 是在内存中连续存储的一组同种数据类型的元素(变量),每一数组有一个唯一名称,通过在名称后面加索引(index)的方式可以引用它的每一个元素。也就是说,例如我们有5个整型数值需要存储,但我们不需要定义5个不同的变量名称,而是用一个数组(array)来存储这5个不同的数值。注意数组中的元素必须是同一数据类型的,在这个例子中为整型(int)。例如一个存储5个整数叫做billy的数组...转载 2018-06-21 10:20:07 · 1810 阅读 · 0 评论 -
C++ 高级数据类型(二)—— 字符序列
前面基础知识部分讲C++变量类型的时候,我们已经提到过C++的标准函数库提供了一个string类来支持对字符串的操作。然而,字符串实际就是一串连续的字符序列,所以我们也可以用简单的字符数组来表示它。例如,下面这个数组:char jenny [20];是一个可以存储最多20个字符类型数据的数组。你可以把它想象成:理论上这数组可以存储长度为20的字符序列,但是它也可以存储比这短的字符序列,而且实际中常...转载 2018-06-21 10:20:13 · 258 阅读 · 0 评论 -
C++ 控制结构和函数(一) —— 控制结构
一个程序的语句往往并不仅限于线性顺序结构。在程序的执行过程中它可能被分成两支执行,可能重复某些语句,也可能根据一些判断结果而执行不同的语句。因此C++ 提供一些控制结构语句 (control structures) 来实现这些执行顺序。为了介绍程序的执行顺序,我们需要先介绍一个新概念:语句块(block of instructions)。一个语句块(A block of instructions)...转载 2018-03-20 10:47:48 · 516 阅读 · 0 评论 -
C++基础知识(五)—— 基本输入输出
控制台(console)是电脑的最基本交互接口,通常包括键盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备,而 屏幕为标准输出设备。在C++的iostream函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerr和clog也已经被实现――它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或到一个日...转载 2018-03-20 10:43:18 · 765 阅读 · 0 评论 -
C++基础知识(四)—— 操作符/运算符
前面已经学习了变量和常量,我们可以开始对它们进行操作,这就要用到C++的操作符。有些语言,很多操作符都是一些关键字, 比如add, equals等等。C++的操作符主要是由符号组成的。这些符号不在字母表中,但是在所有键盘上都可以找到。这个特点使得C++程序更简洁,也更国际化。运算符是C++语言的基础,所以非常重要。 你不需要背下所有这一小节的内容,这些细节知识仅供你以后需要时参考 。赋值...转载 2018-03-20 10:16:46 · 367 阅读 · 0 评论 -
C++基础知识(三)—— 常量
一个常量(constant)是一个有固定值的表达式。字(Literals)字是用来在程序源码中表达特定的值。在前面的内容中我们已经用了很多的字来给变量赋予特定的值。例如:a = 5;这句代码中5就是一个字常量。字常量(literal constant)可以被分为整数(Integer Numbers), 浮点数(Floating-Point Numbers),字符(Characters)和字符串(S...转载 2018-03-20 10:10:29 · 354 阅读 · 0 评论 -
C++基础知识(二)—— 变量和数据类型
你可能觉得这个“Hellow World”程序用处不大。我们写了好几行代码,编译,然后执行生成的程序只是为了在屏幕上看到一句话。的确,我们直接在屏幕上打出这句话会更快。但是编程并不仅限于在屏幕上打出文字这么简单的工作。为了能够进一步写出可以执行更有用的任务的程序,我们需要引入变量(variable)这个的概念。让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字。你已经存储...转载 2018-03-20 10:03:56 · 425 阅读 · 0 评论 -
C++基础知识(一)—— C++程序结构
下面我们从一个最简单的程序入手看一个C++程序的组成结构。// my first program in C++#include <iostream.h>using namespace std;int main() { cout << “Hello World!”; return 0;}Hello World! 上面左侧显示了我们的第一个程序...转载 2018-03-20 09:52:35 · 6014 阅读 · 0 评论 -
C++学习基础篇 —— 引用(&amp;)的用法和应用
一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符&引用名=目标变量名;【例1】:[cpp] view plain copyint a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 ...转载 2018-03-20 09:47:43 · 2360 阅读 · 0 评论 -
C++ 高级数据类型(三)—— 指针
我们已经明白变量其实是可以由标识来存取的内存单元。但这些变量实际上是存储在内存中具体的位置上的。对我们的程序来说,计算机内存只是一串连续的单字节单元(1byte cell),即最小数据单位,每一个单元有一个唯一地址。计算机内存就好像城市中的街道。在一条街上,所有的房子被顺序编号,每所房子有唯一编号。因此如果我们说芝麻街27号,我们很容易找到它,因为只有一所房子会是这个编号,而且我们知道它会在26号...转载 2018-06-21 10:20:19 · 349 阅读 · 0 评论 -
C++ 高级数据类型(四)—— 动态内存分配
到目前为止,我们的程序中我们只用了声明变量、数组和其他对象(objects)所必需的内存空间,这些内存空间的大小都在程序执行之前就已经确定了。但如果我们需要内存大小为一个变量,其数值只有在程序运行时 (runtime)才能确定,例如有些情况下我们需要根据用户输入来决定必需的内存空间,那么我们该怎么办呢?答案是动态内存分配(dynamic memory),为此C++ 集成了操作符new 和delet...转载 2018-06-21 10:20:26 · 122 阅读 · 0 评论 -
C++ 高级数据类型(五)—— 数据结构
一个数据结构是组合到同一定义下的一组不同类型的数据,各个数据类型的长度可能不同。它的形式是:struct model_name {type1 element1;type2 element2;type3 element3;..} object_name;这里model_name 是一个这个结构类型的模块名称。object_name 为可选参数,是一个或多个具体结构对象的标识。在花...转载 2018-07-19 15:21:00 · 468 阅读 · 0 评论 -
C++ 高级篇(五)—— 预处理指令
预处理指令是我们写在程序代码中的给预处理器(preprocessor)的 命令,而不是程序本身的语句。预处理器在我们编译一个C++程序时由编译器自动执行,它负责控制对程序代码的第一次验证和消化。所有这些指令必须写在单独的一行中,它们不需要加结尾的分号;。#define在这个教程的开头我们已经提到了一种预处理指令: #define ,可以被用来生成宏定义常量(defined ...转载 2019-07-21 08:58:43 · 430 阅读 · 0 评论 -
C++ 高级篇(四)—— 类型转换高级
目前为止,我们一直使用传统的类型转换符来进行简单对象的类型转换。例如,要把一个double类型的浮点型数字转换为int 的整型数字,我们是这样做的:int i;double d;i = (int) d;或者i = int (d);这样做对基本数据类型时没问题的,因为基本数据类型的转换已经有标准的定义。同样的操作也可以被在类或类的指针上,因此以下例子中的写法也是没有问题的:...转载 2019-07-21 08:58:34 · 188 阅读 · 0 评论 -
C++ 高级篇(三)—— 出错处理
本节介绍的出错处理是ANSI-C++ 标准引入的新功能。如果你使用的C++ 编译器不兼容这个标准,则你可能无法使用这些功能。在编程过程中,很多时候我们是无法确定一段代码是否总是能够正常工作的,或者因为程序访问了并不存在的资源,或者由于一些变量超出了预期的范围,等等。这些情况我们统称为出错(例外),C++ 新近引入的三种操作符能够帮助我们处理这些出错情况: try, throw 和 catc...转载 2018-07-19 15:22:57 · 440 阅读 · 0 评论 -
C++ 高级篇(二)—— 名空间 (Namespaces)
通过使用名空间(Namespaces)我们可以将一组全局范围有效的类、对象或函数组织到一个名字下面。换种说法,就是它将全局范围分割成许多子域范围,每个子域范围叫做一个名空间(namespaces).使用名空间的格式是: namespace identifier { namespace-body }这里identifier 是一个有效的标示符,namespace-body...转载 2018-07-19 15:22:42 · 194 阅读 · 0 评论 -
C++ 高级篇(一)—— 模板(Templates)
模板(Templates)是ANSI-C++ 标准中新引入的概念。如果你使用的 C++ 编译器不符合这个标准,则你很可能不能使用模板。 函数模板( Function templates)模板(Templates)使得我们可以生成通用的函数,这些函数能够接受任意数据类型的参数,可返回任意类型的值,而不需要对所有可能的数据类型进行函数重载。这在一定程度上实现了宏(macro)的作用。...转载 2018-07-19 15:22:37 · 2264 阅读 · 2 评论 -
C++ 面向对象(四)—— 多态 (Polymorphism)
基类的指针(Pointers to base class)继承的好处之一是一个指向子类(derived class)的指针与一个指向基类(base class)的指针是type-compatible的。 本节就是重点介绍如何利用C++的这一重要特性。例如,我们将结合C++的这个功能,重写前面小节中关于长方形rectangle 和三角形 triangle 的程序:// pointers to...转载 2018-07-19 15:22:32 · 186 阅读 · 0 评论 -
C++ 面向对象(三)—— 类之间的关系
友元函数(Friend functions)在前面的章节中我们已经看到了对class的不同成员存在3个层次的内部保护:public, protected 和 private。在成员为 protected 和 private的情况下,它们不能够被从所在的class以外的部分引用。然而,这个规则可以通过在一个class中使用关键字friend来绕过,这样我们可以允许一个外部函数获得访问class的...转载 2018-07-19 15:21:28 · 214 阅读 · 0 评论 -
C++ 面向对象(二)—— 操作符重载
C++ 实现了在类(class)之间使用语言标准操作符,而不只是在基本数据类型之间使用。例如:int a, b, c;a = b + c;是有效操作,因为加号两边的变量都是基本数据类型。然而,我们是否可以进行下面的操作就不是那么显而易见了(它实际上是正确的):struct { char product [50]; float price; } a, b, c;a = b + c;...转载 2018-07-19 15:21:21 · 199 阅读 · 0 评论 -
C++ 面向对象(一)—— 类(Classes)
类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。类定义的形式是:[cpp] view plain copyclass class_name { permission_label_1: member1;...转载 2018-07-19 15:21:15 · 463 阅读 · 0 评论 -
C++ 高级数据类型(六)—— 自定义数据类型
前面我们已经看到过一种用户(程序员)定义的数据类型:结构。除此之外,还有一些其它类型的用户自定义数据类型: 定义自己的数据类型 (typedef)C++ 允许我们在现有数据类型的基础上定义我们自己的数据类型。我们将用关键字typedef来实现这种定义,它的形式是:typedef existing_type new_type_name;这里 existing_type 是C++ ...转载 2018-07-19 15:21:09 · 8938 阅读 · 0 评论 -
C++ 标准函数库 —— 文件的输入输出 (Input/Output with files)
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说...转载 2019-07-21 09:01:39 · 226 阅读 · 0 评论