C++基础总结

1、cin,cout键盘输入屏幕输出
头文件包含:#include
using namespace std;
或者直接;
std::cout<<“内容”<<endl;
2、string类
像表示整形那样定义字符串,用string类定义的字符串,可以直接用“+”号拼接字符串,用“=”号进行赋值,这点比数组方便的多。
3、new和delete配套使用防止内存泄漏
如果使用new[]为数组分配空间,则用delete[]释放空间
使用new动态分配空间,节省空间,返回指针。
C语言中使用malloc()和free()进行动态内存管理。
4、内存
栈区:系统自动申请的变量空间存放在这儿,自动申请自动释放,程序在运行中是栈区动态伸缩变化的过程
堆区:程序员自己申请的变量空间存在这,需要自己释放。
静态区(全局数据区):也称全局变量空间区,在程序运行的整个生命周期存在,函数外部定义的变量,或函数内部的变量前加static修饰。
程序代码区:存放代码
5、数组的替代品vector、array类
字符串以’\0’结束,strlen计算实际的字符串长度,不包含’\0’
模板类vector类似于string类,也是一种动态数组。实际上vector类使用new和delete管理内存,但是自动完成的。
格式:vector vt(n_elem) 声明创建一个名为vt的vector对象,它可存储n_elem个类型为typeName的元素,_elem可以是整型常量,也可以是整型变量,包含头文件#include
array与数组一样,array对象的长度也是固定的,也使用栈。包含头文件:#include
下面的声明创建一个名为arr的array对象,它包含n_elem个类型为typename的元素:
arrar<typeName ,n_elem>arr;其中n_elem不能是变量
模板类vector是动态数组的替代品,模板类array是定长数组的替代品。
6、字符函数库:cctype
isalnum( )
如果参数是字母数字,即字母或数字,该函数返回true
isalpha( )
如果参数是字母,该函数返回true
iscntrl( )
如果参数是控制字符,该函数返回true
isdigit( )
如果参数是数字(0~9),该函数返回true
isgraph( )
如果参数是除空格之外的打印字符,该函数返回true
islower( )
如果参数是小写字母,该函数返回true
isprint( )
如果参数是打印字符(包括空格),该函数返回true
ispunct( )
如果参数是标点符号,该函数返回true
isspace( )
如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表符或者垂直制表符,该函数返回true
isupper( )
如果参数是大写字母,该函数返回true
isxdigit( )
如果参数是十六进制数字,即0~9、a~f或A~F,该函数返回true
tolower( )
如果参数是大写字符,则返回其小写,否则返回该参数
toupper( )
如果参数是小写字符,则返回其大写,否则返回该参数
7、条件运算符?:
它也是C++中唯一一个需要三个操作数的运算符
a>b?c:d//a>b返回c否则返回d
8、switch比else if语句的效率更高
continue跳过循环体剩余的部分,开始新一轮循环。break跳出循环到达下一条语句。
9、递归函数:自己调用自己
10、内联函数
c++为提高程序运行速度做的一项改进。
常规函数将程序流程转到独立的函数,内联函数将用内联代码替换函数调用。
常规函数调用:执行到函数调用指令后,程序将在函数调用后立即储存该函数的内存地址,并将函数地址复制到堆栈,调到标记函数起点的内存单元,执行该函数,执行完成跳回到地址被保存的内存处。来回的跳跃以及指令保存需要一定的开销。
内联函数:使用函数代码替换常规的调用,无需跳转,但是占用内存变大。
在函数声明之前加上inline就是内联函数,内联函数不能递归,函数体不能过大。
C语言中的内联函数原始实现,使用预处理器宏定义来实现。
11、引用变量&
int a;
int &b =a;
引用变量是一种伪装指针,它允许为变量创建别名
其中,&不是地址运算符,而是类型标识符的一部分。就像声明中的char指的是指向char的指针一样,int &指的是指向int的引用。上述引用声明允许将rats和rodents互换——它们指向相同的值和内存单元
引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量的别名。这种传递参数的方法称为按引用传递。按引用传递允许被调用的函数能够访问调用函数中的变量。
程序员能够修改调用函数中的数据对象。
通过传递引用而不是整个数据对象,可以提高程序的运行速度。
如果数据对象很小,如内置数据类型或小型结构,则按值传递。
如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率。这样可以节省复制结构所需的时间和空间。
如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++新增这项特性的主要原因。因此,传递类对象参数的标准方式是按引用传递。
12、函数重载
函数重载的关键是函数的参数列表。仅当函数基本上执行相同的任务,但使用不同形式的数据时,才应采用函数重载。
13、函数模板
即通用的函数描述。
要建立一个模板,并将类型命名为AnyType。关键字template和typename是必需的,除非可以使用关键字class代替typename。
template 或 template, 一般AnyType使用T
14、重载的模板
对于给定的函数名,可以有模板函数、显式具体化模板函数、非模板函数以及他们的重载版本。
显式具体化的原型和定义应以template<>打头
具体化优先于常规模板,而非模板函数优先于具体化和常规模板。
15、作用域解析运算符::
名称空间:简化大型编程项目的管理工作
使用在已命名的名称空间中声明的变量,而不是使用外部全局变量。
使用在已命名的名称空间中声明的变量,而不是使用静态全局变量。
如果开发了一个函数库或类库,将其放在一个名称空间中。事实上,C++当前提倡将标准函数库放在名称空间std中,这种做法扩展到了来自C语言中的函数。例如,头文件math.h是与C语言兼容的,没有使用名称空间,但C++头文件cmath应将各种数学库函数放在名称空间std中。实际上,并非所有的编译器都完成了这种过渡。
仅将编译指令using作为一种将旧代码转换为使用名称空间的权宜之计。
不要在头文件中使用using编译指令。首先,这样做掩盖了要让哪些名称可用;另外,包含头文件的顺序可能影响程序的行为。如果非要使用编译指令using,应将其放在所有预处理器编译指令#include之后。
导入名称时,首选使用作用域解析运算符或using声明的方法。
对于using声明,首选将其作用域设置为局部而不是全局。
16、class
公有部分的内容构成了设计的抽象部分——公有接口。将数据封装到私有部分中可以保护数据的完整性,这被称为数据隐藏.
构造函数:对类中私有变量初始化,在创建类对象时被调用。
析构函数:如果构造函数使用new来分配内存,则析构函数使用delete来释放内存。
17、const成员函数
void stock :: show() const
以这种方式声明和定义的类函数被称为const成员函数。就像应尽可能将const引用和指针用作函数形参一样,只要类方法不修改调用对象,就应将其声明为const。从现在开始,我们将遵守这一规则。
18、this指针
this指针被设置为调用对象的地址,因此
this是该对象的别名。
19、友元
友元函数
友元类
友元成员函数
函数成为友元,需要在类声明中声明该函数,并在声明前加上关键字friend
类的复制构造函数:Class_name(const Class_name &);
20、类继承 :
派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问。
经常在基类中将派生类会重新定义的方法声明为虚方法.关键字virtual
如果数组成员指向的是Brass对象,则调用Brass::ViewAcct( );如果指向的是BrassPlus对象,则调用BrassPlus::ViewAcct( )。如果Brass::ViewAcct( )被声明为虚的,则在任何情况下都将调用Brass::ViewAcct( )。
21、虚函数:关键字virtual
如果要在派生类中重新定义基类的方法,则将它设置为虚方法;否则,设置为非虚方法。
虽然非虚函数的效率比虚函数稍高,但不具备动态联编功能。
在基类方法的声明中使用关键字virtual可使该方法在基类以及所有的派生类(包括从派生类派生出来的类)中是虚的。
构造函数不能是虚函数。创建派生类对象时,将调用派生类的构造函数,而不是基类的构造函数,然后,派生类的构造函数将使用基类的一个构造函数,这种顺序不同于继承机制。因此,派生类不继承基类的构造函数
析构函数应当是虚函数,除非类不用做基类。
友元不能是虚函数,因为友元不是类成员,而只有成员才能是虚函数。如果由于这个原因引起了设计问题,可以通过让友元函数使用虚成员函数来解决。
设计基类时,必须确定是否将类方法声明为虚的。如果希望派生类能够重新定义方法,则应在基类中将方法定义为虚的
22、public、private、protected
private和protected之间的区别只有在基类派生的类中才会表现出来。派生类的成员可以直接访问基类的保护成员,但不能直接访问基类的私有成员。因此,对于外部世界来说,保护成员的行为与私有成员相似;但对于派生类来说,保护成员的行为与公有成员相似。
23、c++标准模板库STL
STL是一个容器类模板、迭代器类模板、函数对象模板和算法函数模板的集合,它们的设计是一致的,都是基于泛型编程原则的。算法通过使用模板,从而独立于所存储的对象的类型;通过使用迭代器接口,从而独立于容器的类型。迭代器是广义指针。
24、异常机制
C++异常机制为处理拙劣的编程事件,如不适当的值、I/O失败等,提供了一种灵活的方式。引发异常将终止当前执行的函数,将控制权传给匹配的catch块。catch块紧跟在try块的后面,为捕获异常,直接或间接导致异常的函数调用必须位于try块中。
25、迭代器
什么是迭代器?它是一个广义指针。事实上,它可以是指针,也可以是一个可对其执行类似指针的操作——如解除引用(如operator*( ))和递增(如operator++( ))——的对象。稍后将知道,通过将指针广义化为迭代器,让STL能够为各种不同的容器类(包括那些简单指针无法处理的类)提供统一的接口。每个容器类都定义了一个合适的迭代器,该迭代器的类型是一个名为iterator的typedef,其作用域为整个类。例如,要为vector的double类型规范声明一个迭代器,可以这样做:
vector :: iterator pd;
输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值