1.c++基础
文章平均质量分 66
主要承接C++中C语言的部分。
123_YQH
努力不秃头!
展开
-
0.0C++和C的区别
早期的C++就是C加上一些面向对象的特性即**(Cwithclasses)。STL是个template的程序库。它对容器、迭代器、算法以及函数对象的规约有极佳的紧密配合与协调。在C++每个次语言中,遵守各自的次语言守则。我们该如何理解C++这门语言呢?.这也是C语言的局限性所在。C++是以C语言为基础。这是面向对象设计的守则。C++如今是一个同时支持。...原创 2022-07-27 21:42:23 · 293 阅读 · 0 评论 -
0.1 命名空间
C++命名空间1.关于命名空间std所谓的namespace,是指标识符的各种可见范围,using namespace std即可见命名空间std中的标识符。1.std是什么? std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。 对象count是标准函数库所提供的对象,而标准库在名字空间中被指定为std,所以在使用cout的时候要加上std::。这样编译器就会明白我们调用的co原创 2021-09-02 16:49:08 · 64 阅读 · 0 评论 -
0.2C++程序编译的过程
C++程序编译过程1.C++程序编译的整体过程C++要把我们写的程序(源代码),转换成硬件上可运行的程序(执行代码),需要编译和链接。编译就是把文本形式源代码(程序员写的可读的代码,如用C++、java写的代码) 翻译成机器语言形式的目标代码(机器可执行的文件,由二进制机器码组成,程序员不可读) 的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,最终形成可执行代码的过程。2.编译过程编译过程可分为三个阶段:编译预处理、编译和汇编,我们主要介绍的是编译预处理编译预处理: 根据原创 2021-09-03 20:05:28 · 178 阅读 · 0 评论 -
0.3头文件重复包含的问题
头文件重复包含和变量重复定义1.避免头文件重复包含的原因避免头文件包含主要有两个原因:在编译C++程序的时候,编译器首先要对程序进行预处理,预处理其中一项工作就是将源程序中#include的头文件完整的展开,如果多次包含相同的头文件,会导致编译器在编译的步骤多次编译该头文件,会导致编译速度变得缓慢。头文件包含的最大问题是使程序在编译链接的时候崩溃。例如://头文件a.hint a=0;//头文件b.h#include"a.h"void f(){}//主函数main.cpp#i原创 2021-09-03 22:19:40 · 1311 阅读 · 0 评论 -
1.C++开始
本章介绍C++的大部分基础内容:类型、变量、表达式、语句及函数。1.开始1.1编写一个简单的c++程序1.1.1C++程序组成一个或多个函数,其中一个必须命名为main是主函数操作系统通过调用main函数来运行C++程序1.1.2C++函数组成返回类型函数名形参列表函数体如:int main(){ return 0;}1.int为返回类型、main为函数名、()内为形参列表、{}内为函数体。2.return语句包括一个值时,此返回值必须原创 2021-08-17 22:23:14 · 135 阅读 · 0 评论 -
2.变量和基本类型
数据类型是程序的基础:它告诉我们数据的意义和*能在数据上执行的操作***如:i=i+j;如果i个j是整型数,这条语句执行的就是普通的加法运算,但如果i和j是Sales_item类型,则上述语句把这两个对象的成分相加。...原创 2021-08-18 21:40:26 · 63 阅读 · 0 评论 -
2.1基本内置类型
111原创 2021-08-18 21:44:30 · 55 阅读 · 0 评论 -
2.2变量
111原创 2021-08-18 21:45:12 · 87 阅读 · 0 评论 -
2.3复合类型
复合类型复合类型指的是基于其他类型定义的类型。主要介绍引用和指针。1.引用引用分为左值引用和右值引用,我们普通说的引用指的是左值引用。为了介绍引用,我们得首先了解什么是左值,什么是右值。1.1左值和右值C++的表达式要然是右值,要不然是左值。比较容易忽略的一点是,变量是左值,字面常量是临时量属于右值。左值是持久的,右值是短暂的。**一个左值表达式的求值结果是一个对象或者一个函数。**以常量对象为代表的某些左值不能作为赋值语句的左侧运算对象。某些表达式求值结果是对象,但它们是右值而不是左值。但一个原创 2021-08-25 19:52:08 · 106 阅读 · 0 评论 -
2.4const限定符
1111原创 2021-08-26 17:43:35 · 93 阅读 · 0 评论 -
2.5处理类型
处理类型1.类型别名类型别名是某种类型的同义词。 使用类型别名可以让复杂的类型名字变得简单明了、易于理解和使用。使用类型别名的两种方法:使用typedef:typedef double wages; //wages是double的同义词typedef int *p; //p是int*的同义词使用别名声明using:using SI=Sales_item; //SI是Sales_item的同义词2.auto类型说明符将表达式的值赋值给原创 2021-08-31 17:25:37 · 74 阅读 · 0 评论 -
2.6C++变量的初始化形式
变量的初始化形式1.声明和初始化和赋值的关系:声明:指定一个变量的名字,仅仅是让编译器知道有这个名字,而没有实际分配空间。初始化:给一个声明后尚未初始化后的变量一个有意义的初始值。赋值:销毁一个变量原来的值,并赋予一个新值。初始化和不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象当前的值擦除,而以一个新值来替代。2.变量的初始化形式2.1直接初化:调用与实参匹配的有参构造函数,如:string s1("hiya"); //直接初始化,s1初始化为"hiya"原创 2021-09-27 14:28:15 · 143 阅读 · 0 评论 -
2.7.C++中static关键字的5种基本用法
然而我们将其定义为静态全局变量之后,在main.cpp中便不能访问a,因为静态全局变量的作用域只存在于当前源文件。可以看出改变了创建了两个A的实例b和c,改变了b中的s的值之后,在打印c中s的值也是改变后的值。可以看出,在main函数中成功调用了其他源文件中的函数。在全局变量前面加上satic关键字便成为静态全局变量,,因为局部变量存放在栈区,超出作用范围后就被系统回收。可以看出静态局部变量a的值每次都在增加,因为。,main函数中显然不能访问到。可以成功打印静态成员变量a。与静态成员变量不同,......原创 2022-07-28 17:34:58 · 973 阅读 · 1 评论 -
3.1标准库类型string
标准库类型Stringstring表示可变长的字符序列,使用string要包含头文件,string定义在命名空间std中。1.定义和初始化string类对象如何初始化是由类本身决定的(各种构造函数决定)。 下面介绍string对象的初始化方式:默认初始化:默认初始化是调用string类的默认构造函数初始化string s1; //默认初始化,s1是一个空字符串拷贝初始化:拷贝初始化是调用string类的拷贝构造函数初始化string s2(s1); //拷贝初始化,用s1的值初始化s原创 2021-09-27 16:19:29 · 136 阅读 · 0 评论 -
3.2标准库vector
标准库vectorvector是类模板,用来表示相同类型对象的集合,因此也叫容器。1.定义和初始化vector对象①vector对象有以下几种初始化方法:直接初始化:vector<int> v1(10,1); //v1包含10元素,全是1拷贝初始化:vector<int> v2(v1); //拷贝初始化,用v1来初始化v2默认初始化:vector<int> v3; //默认初始化,v3为空列表初始化:vector<int原创 2021-09-27 19:58:05 · 67 阅读 · 0 评论 -
3.3迭代器1
迭代器1所有标准库容器都可以使用迭代器,使用迭代器可以访问容器对象的元素,很少有容器同时支持下标运算符,如string、vector等。迭代器类似于指针类型,提供了对对象的间接访问。1.迭代器的使用①迭代器的获取和指针不一样,获取迭代器不是使用取地址符,有迭代器的标准库类型同时拥有返回迭代器的成员,如begin和end成员:begin成员返回指向第一个元素的迭代器。 如:auto b = v.begin(); //b返回v中第一个元素的迭代器(相当于指针)end成员返回容器尾元素下一原创 2021-09-27 21:07:07 · 199 阅读 · 0 评论 -
4.表达式
表达式表达式由一个或多个运算对象组成,对表达式求值将得到一个结果,字面值和变量是最简单的表达式,其结果就是字面值和变量的值,把一个运算符和一个或多个运算对象组合起来可以生成较复杂的表达式。表达式求值的结果要么是左值,要么是右值。1.左值和右值C++的表达式要然是右值,要不然是左值。比较容易忽略的一点是,变量是左值,字面常量是临时量属于右值。左值是持久的,右值是短暂的。一个左值表达式的求值结果是一个对象或者一个函数。 以常量对象为代表的某些左值不能作为赋值语句的左侧运算对象。某些表达式求值结果是对象,原创 2021-09-28 12:08:29 · 154 阅读 · 0 评论 -
5. 语句
语句简单语句以分号结束,如表达式语句、空语句。v + 5; //表达式语句cout << v; //表达式语句; //空语句1.复合语句(块)复合语句是指用花括号括起来的语句和声明的序列,复合语句也被称为块。一个块就是一个作用域,只在块中引入的名字只能在块内部以及嵌套在块中的子块里访问。 如:while (v <= 10) { sum += v; ++v; int ret = sum; //ret在块中定义} //离开块ret被销毁cout原创 2021-09-28 15:48:38 · 66 阅读 · 0 评论 -
6.0C++中的临时量
1.定义临时量:编译器在计算表达式结果时创建的无名对象。为某表达式创建了一个临时值,此临时值将一直存在到包含有该表达式的最大表达式计算完成为止。临时量包括非引用返回的函数返回值、表达式。临时量没有名字,不能取地址,不能对临时量进行非常量引用,临时量是一个纯右值。表达式:表达式是由一个或多个运算对象和运算符组成,对表达式求值将得到一个结果,运算符有一元运算符、二元运算符、多元运算符(函数调用是特殊的运算符)。如:int a = 10 + 20; //10+20是一个表达式//等价于int tem.原创 2021-10-06 15:21:23 · 245 阅读 · 0 评论 -
6.1C++函数调用的过程
函数调用过程一个典型的函数定义包括:返回类型、函数名、形参列表以及函数体。通过调用运算符(一对圆括号) 来执行函数。我们通过下面的例子来说明:例:求阶乘的函数int fact(int val) { int ret = 1; while (val >1) { ret *= val--; } return ret;}//调用函数int main() { int j = fact(5); cout << "5! is原创 2021-10-06 17:49:16 · 407 阅读 · 0 评论 -
6.2C++函数的参数传递
函数的参数传递每次调用函数时都会重新创建它的形参,引入实参对形参进行初始化,就像变量初始化一样。当形参是引用类型时,它对应的实参被引用传递或者函数被传引用调用,此时,形参是它对应实参的别名。当实参的值被拷贝给形参时,形参和实参时两个相互独立的对象。这样的实参被值传递或者函数被传值调用。1.传值参数①形参是个非引用非指针变量当进行值传递(by value)时,初始值被拷贝给变量。此时,对变量的改动不会影响初始值, 如:int n = 0; //n相当于实参int i = n; //i相当于形参原创 2021-10-09 23:02:37 · 190 阅读 · 0 评论 -
6.3C++的返回类型和return语句
返回类型和return语句return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方。 returun语句有两种形式:return;return expression;1.无返回值函数没有返回值的return语句只能用在返回类型是void的函数中。返回void的函数不要求非得有return语句,如果不写,最后会隐式的执行return。如果void函数想在它中间位置提前退出,可以使用return语句,类似循环中的break语句。如://swap函数void swap(int &a原创 2021-10-14 09:59:03 · 355 阅读 · 0 评论 -
6.4内联函数和constexpr函数
内联函数和constexpr函数我们先看一个函数,这个函数的功能是比较两个string形参的长度并返回较小的string的引用。string &shorterString(const string &s1, const string &s2) { return s1.size() > s2.size() ? s2 : s1;}这种规模比较小的操作定义成函数有很多好处,包括:阅读shorterString函数比阅读等价表达式容易得多增加通用性,每次相关操作原创 2021-10-14 16:05:24 · 137 阅读 · 0 评论 -
7.Sales_item和Sales_data类
类简介一个类定义了一个类型,以及与其关联的一组操作。就像内置类型告诉我们数据的类型和能在数据上执行的操作一样,类设计的焦点就是能够定义像内置类型一样的自定义类型,具有我们想赋予它的意义和想在它身上执行的操作。1.Sales_item类Sales_item类的作用是表示一本书的总销售额、售出册数和平均售价,能在其身上执行提取Sales_item对象中的书号、<<,>>读写Sales_item对象、=为Sales_item对象赋值、+将两个Sales_item对象相加、+=将一个S原创 2021-09-07 17:52:52 · 840 阅读 · 0 评论 -
7.1this指针
类的基本知识类的基本思想是数据抽象和封装。数据抽象依赖于接口和实现分离的编程技术。通过类的封装,把类的成员数据和成员函数封装到类中,一般成员数据属于private,成员函数在public中作为接口对数据成员进行操作。类的用户只能通过接口而无法访问实现的部分。为了方便说明以下的知识,我们先定义Sales_data类。struct Sales_data{ string isbn()const{return _bookNo;} Sales_data(); Sales_data(co原创 2021-09-07 22:51:00 · 109 阅读 · 0 评论 -
7.2构造函数
构造函数对象初始化的意义是在对象创建的时候给予它初始的值,如果不初始化,则对象的值未定义,使用未定义的对象会发生意想不到的结果,甚至会导致严重的错误,因此我们在创建一个对象时一定要对其初始化:对于内置类型,初始化方式有直接初始化、默认初始化、拷贝初始化和列表初始化。而对于自定义类型对象的初始化是通过构造函数来实现的,构造函数有默认构造函数对应内置类型的默认初始化、有参构造函数对应内置类型的直接初始化、拷贝构造函数对应内置类型的拷贝初始化。构造函数的任务就是初始化类对象的数据成员,无论何时,只要原创 2021-09-08 15:48:50 · 164 阅读 · 0 评论 -
7.3访问控制与封装
7.3访问控制与封装在C++中,我们使用访问说明符加强类的封装性:定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口。定义在private说明符之后的成员可以被类的成员函数访问,但不能被使用该类的代码访问,private部分封装了(隐藏)类的实现细节。成员函数作为接口访问封装的成员数据。struct和class的唯一区别就是struct默认访问权限是public,而class的默认访问权限是private。...原创 2021-09-08 16:23:48 · 102 阅读 · 0 评论 -
7.4友元
友元我们来看最初的Sales_data版本。struct Sales_data { Sales_data() = default; //自定义的默认构造函数 Sales_data(const string& s) :_bookNo(s) {} //有参构造函数 Sales_data(const string& s, unsigned n, double p) : _bookNo(s), _sold(n)原创 2021-09-08 22:12:22 · 83 阅读 · 0 评论 -
7.5类的作用域
1111原创 2021-09-08 22:13:37 · 55 阅读 · 0 评论 -
7.6类的静态成员
类的静态成员类的静态成员分为静态数据成员和静态成员函数。1.静态数据成员有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。例如:一个银行账户类可能需要一个数据成员来表示当前基准利率。我们希望基准利率与类关联而不是与对象关联,因为不管谁开账户,银行的利率都是固定的。而且一旦利率浮动,我们希望每个对象都能使用新的利率。这就可以使用静态数据成员来实现这一要求。①静态数据成员在类内声明,类外初始化。 可以是public的也可以是private的.声明方式为:static 类型名原创 2021-09-09 22:51:16 · 228 阅读 · 0 评论