![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++程序设计语言
极致 for 简单
贵在坚持
展开
-
C++程序设计语言第六章——类型与声明
c++作为强类型编程语言,任意一个变量都要有类型,说明了类型才有后续的运算。主题上可分为内置类型(基本类型、指针、引用)和用户自定义类型(枚举类型、类)。一、基本类型:布尔值类型、字符类型、整数类型、浮点数类型、void类型布尔值类型:布尔值可以转化为整数,即true—1和false—0;并且布尔值做算术逻辑运算时自动转为整数整数也可以隐式的转化为布尔型,非0转为true,0转为false...原创 2019-01-20 14:52:24 · 280 阅读 · 0 评论 -
友元、嵌套、异常
在其他类中声明的类:友元类、友元成员函数、嵌套类。之前我们学习过友元函数(普通函数),一个类包含友元函数,该友元函数相当是扩展了该类的接口。类并非只能包含一个友元函数,还能包含一个友元类,使得该类中的所有方法都可以访问修改该类的成员。稍稍严格一些呢。我们可以限制某个类的某个成员方法为另一个类的友元成员函数,只有该方法可以访问修改该类的成员,而类中的其它方法无此权限。一个类能够对谁开放权限,这是...原创 2019-03-15 10:26:56 · 153 阅读 · 0 评论 -
C++代码重用
代码重用:符合is-a关系的公有继承,has-a关系的私有继承、保护继承、一个类的成员是另一个类对象,多个基类组合形成新的类(多重继承),类模板。包含对象成员的类:在类内可定义成员函数,使用类成员的公有方法访问修改类对象(可以理解为获得了成员接口的实现,但没有继承类成员的接口)。在类外只能用公有方法访问修改类对象成员。has-a不能继承接口!继承接口意味着将基类的公有方法添加到 自己的接口中...原创 2019-03-11 19:31:58 · 511 阅读 · 0 评论 -
编程基础
关键词:编译器会将其视作为具有特殊意义的名称,在声明变量、函数名称时,不可与关键词相同。C++内建数据类型:是我们编程的基石(整形、浮点型),但若是只使用基础的数据类型来编程,远远不够,麻烦冗余。为此有类的概念,增强抽象层次。字符常量:可打印字符、不可打印字符(用字符序列来表示)。字符串常量:可包含可打印字符和不可打印字符。类:分为两部分,头文件和实现文件,头文件用于表示类所提供的各种...原创 2019-03-24 19:17:36 · 1523 阅读 · 0 评论 -
输入、输出、文件
C++在头文件iostream和fstream定义了一系列的类,用于实现I/O。iostream和fstream是标准类库的一部分。一个C++程序如何实现输入和输出?输入流和输出流!不关注源和目标的来源,只在意如何从输入流中抽取信息给程序,如何向输出流插入字节,输入流和输出流都是字节流。所以才说输入的来源不重要,使用的仅是输入流。但对于输入流来说,需要绑定输入的来源(设备还是文件),需要指明流向...原创 2019-03-21 20:41:41 · 177 阅读 · 0 评论 -
函数
参数传递方式:传值和传址,区别在于,形参是实参的副本还是能够间接操作实参。说起函数调用,有件事不能不提,就是调用函数时,会将其形参、内部定义的对象通通存到栈中,而当函数调用结束时,会释放这片栈空间。传值:在栈中为该函数分配一片空间,将实参的值复制到栈空间中,因而形参是实参的副本,在函数对形参的操作完全不会影响实现,都不是一个内存空间,谈何影响???传址:引用:与指针不同,指针可以为空,不知...原创 2019-03-25 16:51:49 · 86 阅读 · 0 评论 -
string类和标准模板库
本文将主要介绍C++提供给我们的可重用代码:string类、标准模板库(STL)即处理各种容器对象的模板`。string类:定义在头文件string中,而头文件cstring包含了许多处理C风格的字符串的函数。string类所包含的方法大致可分为:构造函数、赋值、比较、访问字符串中的各个元素、查找字符或是字符串、大量的运算符重载函数。string实际是模板basic_string<c...原创 2019-03-19 09:51:42 · 343 阅读 · 0 评论 -
基于对象的编程风格
类是抽象概念,设计类的出发点定义操作,数据存储可以采取多种方式(或者根据操作选择效率最高的数据类型),但是想要施加的操作是唯一的。所以第一步,确定操作,这也是为什么在很多参考书上先写操作,后写数据对象的原因吧。比如栈吧,把它定义一个类型后,可限制我们对其采用的操作,不然我们完全没必要在定义一个stack类,直接使用vector存储数据不就行了,直接使用vector就是面向过程的编程思想,没有完全...原创 2019-03-30 09:21:58 · 356 阅读 · 0 评论 -
泛型编程风格
标准模板库(STL)两大组件:容器(序列和关联)和泛型算法(用以操作这些容器类的函数)。标准模板库中都是一些模板类的定义,这使得我们可以直接使用这些模板类而无需自己定义模板类。序列式容器为我们维护了一组元素值,在序列容器上更多的还是迭代操作。关联容器重在快速寻找元素值。map是key-value相关联的容器,通过key查找value。set仅有key。泛型算法:作用于容器上的某种算法。所谓泛型...原创 2019-03-26 18:29:41 · 143 阅读 · 0 评论 -
右值引用、部分C++11新特性
左值引用和右值引用:左值引用关联的是左值,左值是什么?有名称的内存空间,可多次访问到的。可获取其地址值。左值可出现在赋值运算符左侧,故而称为左值,当然可以出现在右侧,但右值不能出现在赋值运算符左侧。左值引用相当是为左值起了个别名,获取到左值的存储空间。右值引用关联的是右值:右值是临时的,不能对其使用地址运算符,可出现在赋值运算符右侧的,故而称为右值。由于压根无法获取右值的存储空间,因而...原创 2019-03-24 13:04:42 · 155 阅读 · 0 评论 -
面向对象的编程思想
上篇文章里谈及了基于对象的编程思想,重在封装特性的实现,与其使用一堆基本数据类型来进行操作,为何不将其封装起来同时给其增加一些操作,当在使用类对象的时候可以直接通过调用其成员函数来对其做一些操作,这不是很方便吗?!包括如何设计类:几个特殊的成员函数,如何使用对象。但是啊,C++被称为面向对象的编程,而不是基于对象的编程,显然需要对基于对象的编程再做改进!问题来了!有了基于对象的思想就够了吗?针对...原创 2019-04-01 09:57:02 · 207 阅读 · 0 评论 -
以template进行编程
模板类的编写和非模板类编写上有个很大区别,类定义和声明不可以分开写,成员函数的定义要写在头文件中!因为这个问题坑了好久!!!为什么需要template理念?这些高级的语法都是为了使得编程更简单!减少代码冗余!之前的文章中,讲过函数模板,函数实现的内容相同,只有数据类型不同!针对这样的情况,我们将数据抽离出来以类型参数代替。面向对象的理念是将具有继承关系的类的方法抽离出来,视情况实现一份或是多...原创 2019-04-02 19:14:39 · 410 阅读 · 0 评论 -
类继承
本文主要内容:引言:OOP一个主要目的实现代码的可重用性,对于C语言来说由函数库,也可以实现代码的重用,但需要获取源代码,根据需要该内部代码。但是C++的继承机制使得无需源代码,我们就可以在其基础上,增加新的功能,添加新的数据成员,改变函数行为。继承包含:公有继承、保护继承、私有继承。公有继承:基类中的公有成员将成为派生类中的公有成员,基类中的私有成员也将成为派生类的一部分(但是不能直接访问...原创 2019-03-04 19:56:21 · 86 阅读 · 0 评论 -
类和对象
本文主要内容:过程性编程和面向对象编程思维过程性编程和面向对象编程思维差异:过程性编程先是考虑步骤,编写合适的函数,再考虑如何表示数据。面向对象编程先是考虑如何表示数据和考虑如何使用数据(用户接口);再来完成数据存储、如何实现接口。面向对象编程特性:抽象、数据隐藏、封装、多态、继承、代码可重用性抽象和类:用户定义类型是实现了抽象接口的类设计,那么类型是什么?用多大的内存空间来存储...原创 2019-02-26 18:59:19 · 119 阅读 · 0 评论 -
类和动态内存分配
本文的主要内容:1、类成员动态分配内存一系列操作方法(分配、释放)2、特殊成员函数:复制构造函数、赋值运算符重载函数3、静态类成员、静态成员函数4、动态分配对象存储空间(常规new 和定位new)5、指向对象的指针了解一下对象创建过程:1、根据类声明分配合适的存储空间,这里对象只存储非静态的数据成员,静态数据成员存在特殊的位置被所有对象共享。2、调用构造函数,为对象的数据成员赋初值...原创 2019-03-02 14:01:34 · 1318 阅读 · 0 评论 -
C++ primer plus预备知识笔记
计算机程序:通过让计算机执行特定的指令来解决实际问题。过程编程基础上加入两个十分重要的概念:面向对象编程(对象、类、封装、数据隐藏、多态、继承)、泛型编程!C语言最大的优点与硬件联系紧密,性能好;过程编程以算法为核心,相较于原来的语言,加入了控制和函数概念。OOP改变设计思维,通过建立类,以数据为中心来定义针对数据的操作,使用类表示概念(待解决的问题有哪些概念并将其联系起来),强大之处在于可...原创 2019-01-25 19:57:46 · 130 阅读 · 0 评论 -
C++程序语言设计——第9章语句
语句作用:指定程序执行的顺序。声明是一条语句,赋值和函数调用不是语句是表达式。声明作为语句:除非变量被声明为static,否则在控制线程传递给当前声明语句的同时执行初始化器。如果没有为变量找到合适的值,不要声明变量,有一种情况例外,先声明变量,再通过用户输入来为变量赋值。选择语句:1.在条件中声明变量更安全,变量的作用从声明起开始到条件控制语句(变量在整个if…else if…else中...原创 2019-01-22 14:42:15 · 137 阅读 · 0 评论 -
C++ primer plus第三章基本数据类型
C++内置类型可分为:基本类型和复杂类型。基本类型:整数和浮点数,以及其变种。复杂类型:数组、指针、结构、字符串。使用变量、指针来标识所存储的数据,若变量名由多个单词构成,可以用下划线分隔或是每个单词的首字母大写表示。一、整形(没有小数部分的数字)整数可以很大,因此程序语言所能表达的数值范围仅是整数的一个子集。C++基本整形有char 、short 、int 、long 、long lo...原创 2019-01-28 19:50:51 · 188 阅读 · 1 评论 -
C++ primer plus ———第四章复合类型(一)
前面已经回顾了C++中的基本类型,而复合类型就是利用基本类型来创建的,数组是由多个同类型元素组成的,特别有字符数组用来存储字符串;结构由多个不同类型的元素组成;指针是一种告诉计算机数据在内存位置的变量。一、数组1.由多个确定的同类型基本类型元素构成,利用下标获取数组元素,对每个元素做处理2.声明:类型 数组名[个数]:个数必须在编译时就确定下来,可以是个符号常量、常量表达式、字面值3.数组...原创 2019-01-30 15:59:52 · 150 阅读 · 0 评论 -
C++函数新的特性
c++为函数添加的新特性:内联函数、默认参数、模板函数、按引用传递参数、函数重载。本篇文章将围绕这五大方面进行介绍。内联函数:设计初衷:普通函数调用需要做繁杂的工作,譬如:保存当前代码的地址、将函数参数复制到分配的堆栈中、跳转到指定的函数入口、执行函数代码、返回被保存的指令的地址。当被调用函数的执行时间很短时,大部分的时间都用来作预处理,效率不高,特别是,该函数存在多次调用。为此,c++提出...原创 2019-02-23 09:46:49 · 216 阅读 · 0 评论 -
内存模型和名称空间
本文探索的主题:单独编译单独编译:大型程序通过由多个源代码文件组成,每个源代码文件单独编译然后链接成为可执行程序。编译器不但能编译程序,也能管理链接器。大型程序组织策略:头文件:多个源代码文件可能都需要使用的结构,以及函数原型,便于修改和管理,只需要改动头文件即可源代码文件:与头文件中结构相关的函数定义源代码文件:调用与结构相关的函数或是:头文件:多个源代码文件都需要使用到的类...原创 2019-02-24 15:12:02 · 164 阅读 · 0 评论 -
C++复合类型(二)——指针
程序在存储数据时,需要知道数据类型、数据值、数据被存储在哪里。获取内存两种方式:声明变量获得内存,动态分配内存!C++支持通过声明变量达到上述的目的:类型、访问符合名(可得数据值)、程序会为数据分配内存空间并跟踪该内存单元。其实,声明变量在静态编译下已经可以很好地表示我们希望存储的数据,但我们希望能更灵活的操作内存空间,比如,对于一个数组,运行时才确定数组的大小,为此C++提供了动态声明数组的...原创 2019-02-19 10:19:11 · 142 阅读 · 0 评论 -
C++函数的基本用法(一)
介绍内容:1.函数定义、传参、返回值2.利用函数处理数组、字符串、结构3.递归、函数指针一、基本概念正确使用函数三大步骤:函数定义、函数原型、函数调用函数定义:以有无返回值来分,可分为无返回值、有返回值的函数:对于有返回值的函数来说,返回的值返回给调用函数,注意数组不能作为返回类型而出现,但数组可作为结构、类型的组成部分出现。所返回的数值可用作赋值、显示等用途。被调用函数和调用函...原创 2019-02-20 15:53:49 · 1661 阅读 · 0 评论 -
类特性
主要内容:运算符重载友元函数类型转化运算符重载:我们的目标使得用户定义类型和基本类型的用法相似,为了这一目标,我们继续前进吧!允许C++赋予运算符多种含义,根据操作数的类型和个数决定所调用的函数。比如*,即可表示乘法,也可取相应地址的内容。运算符函数:注意的是op必须是C++所定义的运算符,第一个操作数调用运算符函数,第二个操作数作为运算符函数的参数。根据操作数据的个数和类型,调...原创 2019-03-02 09:52:25 · 483 阅读 · 0 评论 -
类设计知识总结篇
一、编译器生成的特殊成员函数1、默认构造函数没有定义构造函数下才有该函数,一旦定义了构造函数,编译器就不会为我们提供默认无参的构造函数,但自己可以定义无参(参数都带有默认值)的构造函数,对于派生类的默认构造函数,函数内部将先调用基类的默认构造函数。设计初衷:创建对象时保证成员获得内存空间并得到正确初值,特别是成员为指针,就涉及到在构造函数利用new动态分配内存。2、默认析构函数、复制构造...原创 2019-03-05 14:21:06 · 154 阅读 · 0 评论 -
异常处理
为什么需要异常机制?类的设计和使用是分离的,设计者也可能知道一些异常情况,当出现这样的异常情况,需要停止当前执行,并以一种机制来告知使用者。类的使用者能根据所使用的类中可能出现的所有异常情况来决定如何处理各种情况!异常处理机制包括:抛出异常和捕获异常。抛出异常:类的设计内进行抛出,一旦抛出异常,程序的正常执行将被停止。而类的设计者有权处理这种异常,为此通常使用类的函数中进行捕获,这称为捕获异...原创 2019-04-03 14:53:28 · 129 阅读 · 0 评论