1,枚举类型 —— 下标自0开始

enum 枚举类型名 { 常数表 }

2,C++ 的异常处理机制实际上是一种运行时通知机制

3,delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的。删除空指针所指向内存是可以的。

4,为了避免内存泄露,在删除一个指针后应该将其其值赋为0。

5,常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值是可以改变的,比如int a; int * const p = &a;

指向常量的指针表示指针指向的对象是不能被修改的,但是该指针可以被修改,即该指针可以指向另一块目标内存地址。比如const int a = 0; const int *p = &a; 如果A是一个类,也可以为const A* p = new A; —— 可以理解成只读指针

而指向常量的常指针表示指针本身不能被修改,其指向的内存地址内容也不能被修改。比如const int a = 0; const int * const p = &a;

6,既然引用实现了指针的功能,而且使用起来更加方便,为什么还要指针呢?

这是因为指针可以为空,但是引用不能为空,指针可以被赋值,但是引用只可以被初始化,不可以被赋为另一个对象的别名。如果你想使用一个变量来记录不同对象的地址,那么就必须使用指针,另外指针也可以是多重的。指针可以指向堆中空间,引用不能指向堆中空间。但指针和引用可以一同使用,另外要注意引用的生命周期。

对于引用而言,如果引用是一个临时变量,那么这个临时变量的生存周期不会小于这个引用的生存期。指针不具备这个特性。

为了避免内存泄露,我们不能按值的方式返回一个堆中对象,而必须按地址或者别名的方式返回一个别名或者内存地址,这样就不会调用复制构造函数来创建一个该对象的副本了,而是直接将该对象的别名或者地址返回。

为了避免指针混淆,我们必须对堆中的内存在哪个函数中创建,就在哪个函数中释放。

7,在一条语句中自加运算符的执行顺序为从右向左,且不同的编译器入栈的顺序不同。

比如说VC6.0中其入栈是要求该语句的表达式执行完后。因此a=1;cout<<a++<<++a;则分别输出的是2,2;

++的结合性为右结合,所以++++i合法,而i++++不合法,可以改为(i++)++;

8,如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,那么在派生类中访问共同基类中的成员函数时会产生二义性,解决方法是需要指定类的作用域,或者将共同的基类设置为虚基类,因为虚基类不会产生二义性。

一个虚函数被说明为虚函数,在派生类中覆盖了该函数,那么该函数也是个虚函数,不过你也可以在它前面添加关键字virtual,这样更容易理解。

继承所体现出的不同子类相同函数有不同的表现,但是这个并不能体现类的多态性,因为类的多态性要求可以用基类指针来操作子类。

9,如果a表示的是数组指针,delete[] a,表示删除堆中的指针数组a,而delete a,表示删除堆中的指针数组第一个指针。

10,由于malloc和free函数产生于C语言时代,因此不可用在c++的对象中,因为对象的产生要调用构造函数。

11,函数名是指向函数的第一条指令的常量指针,这与数组名是指向数组中第一个元素的常量指针一样。

函数指针应该将函数名和前面的指针给括起来。

使用函数指针可以减小一些重复的代码,因为函数指针名可以看作是函数名的代号,我们可以通过它来直接调用,函数指针经常会在条件或者判断语句里出现,以便于用户选择调用不同名字但又返回值类型和参数类型完全相同的函数。函数指针可以作为函数的参数传入。

12,char字符串的比较只能用循环的方式进行(或者使用库函数strcmp函数),而string的比较可以直接用等号。

不可以直接对char型字符串数组进行赋值操作,而只能使用strcpy函数,或者对数组每个元素一个个的赋值。而string类的字符串可以直接用等号进行赋值。另外,string类中还有一个专门的赋值函数assign,这个函数可指定赋值字符串起点和长度。

查看char型字符串的长度可以用strlen函数。string中用size成员函数实现该功能。在char中,strncat可以实现部分字符串的合并。在string中是append函数。同理,char中用strncpy来实现字符串的替换,在string中使用replace来实现该功能,且replace的重载函数中可以兼容char型字符串数组。

char型字符串的拷贝用memmove, string中使用copy成员函数。

string中用insert来插入,其string类是从下标为1开始数的。erase完成字符串的删除。

char型字符串的查找使用函数strchr。而string类中使用find函数实现。该函数有很多变形的函数,比如find_first_not_of函数,表示找到第一个不相同的字符。同理还有find_first_of,find_last_of等函数。反向查找使用rfind()函数,但是它的返回值位置还是从头开始的,并不是从末尾开始的。

string中用compare实现比较,它的c_str()返回一个指向char型的const指针。

13,包含对象是将另一个类的对象作为该类的成员,而嵌套类是在该类中定义了一种新类型,这个类型只能在该类中使用。由于嵌套类作为一种自定义的数据类型被封装在另一个类中,因此可避免与其它类的名称冲突。


参考:http://www.cnblogs.com/tornadomeet

C++ 补课 (三)的更多相关文章

  1. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  2. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  3. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  4. 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践

    本文由马蜂窝技术团队电商交易基础平台研发工程师"Anti Walker"原创分享. 一.引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个 ...

  5. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  6. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  7. 达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

    1.引言   达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利 ...

  8. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...

  9. 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践

    本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...

  10. 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路

    本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动 ...

随机推荐

  1. 通过.ENV文件来配置ThinkPHP的数据库连接信息

    在ThinkPHP系统根目录创建.env文件,注意WINDOWS无法直接右键创建,使用编辑器保存时设置文件名为.env就可以创建文件.内容如下: .evn文件内容如下: [database] host ...

  2. CF983E NN country(倍增,差分)

    题意 给定一棵树和若干条路线,每条路线相当于树上 x,y 之间的路径,途径路径上的每个点 给出若干个询问,每次询问从 u 到 v 至少需要利用几条路线 N,M,Q≤200000 题解 构建倍增数组g[ ...

  3. keytool常用操作

    keytool 秘钥需要存储在秘钥库中,秘钥库可以理解为一个存储了一个或多个秘钥的文件.一个秘钥库可以存储多个密钥对,每个秘钥对你都需要给他们取一个名字. D:\software\Java\jdk1. ...

  4. Linux中常用命令(文件)

    1.cat 显示出文件的全部内容 (1)格式:cat 文件名 -n 显示行号 (2)特点:一次性显示所有文件内容 2.tac 从最后一行倒着显示文件全部内容 3.more 全屏方式分页显示文件内容 回 ...

  5. Git学习笔记 2,GitHub常用命令

    廖雪峰Git教程 莫烦Git教程 莫烦Git视频教程 文件三个状态,add之后从工作区(原始状态)到暂存区,commit之后从暂存区到版本库 工作区 暂存区 版本库 unstage stage mas ...

  6. C++输入流

    输出流基本概念  输出流定义在头文件中.大部分程序都会包含头文件,这个头文件又包含了输入流和输出流头文件.头文件还声明了标准控制台输出流cout.  使用输出流的最简单的方法是使用<<运算 ...

  7. GenIcam标准关键词整理

    1.<?xml> 版本信息和编码方式 IntSwissKnife 需计算和判断的节点 MaskedIntReg 需查询的节点 2.<RegisterDescription> 寄 ...

  8. Spring Cloud学习笔记【十】配置中心(消息驱动刷新配置)

    上一篇中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用 Webhook 的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案 ...

  9. Vsftp权限控制(持续增加中)

    把用户限制在自己的home目录中,例如限制用户Leon只能访问/home/Leon目录下的文件,不允许访问上级目录. 先打开配置文件 vi /etc/vsftpd/vsftpd.conf 第一种方法: ...

  10. Linux下Rootkit的另类检测

     Linux下Rootkit的另类检测 当黑客获取管理员权限时,首先是抹掉入侵系统的相关记录,并且隐藏自己的行踪,要实现这一目的最常用的方法就是使用Rootkits,简单的说,Rootkits是一种经 ...