序言
对个人真的自学程式设计最有效率的形式是写作专精的书刊,透过写作工具书能构筑更为管理体系化的科学知识管理体系。始终年来都很想深入细致自学呵呵C++,将其做为他们的主力部队合作开发词汇。那时为的是顺利完成他们这始终年来的愿望,预备认真自学《C++ Primer Plus》。为的是提升自学工作效率,在自学的桑利县透过正式发布自学讲义的形式,稳步历史记录他们自学C++的操作过程。
一、友元
1、友元类
友元新闻稿能坐落于私有、专有或为保护部份,边线毫无意义。通过如下表所示标识符,能将Remote类新闻稿为Tv类的友元类:
class Tv{ friend class Remote;…}class Remote{…}
2、友元核心成员表达式
让Remote::setchan()称作Tv类的友元的形式是,在Tv类新闻稿上将其新闻稿为友元:
class Tv{ friend void Remote::setchan(Tv & t, int c);…}
为的是化解表述边线循环式依赖的难题,须要采用往前新闻稿(forward declaration)。有鉴于此须要这种展开排序:
class Tv;//往前新闻稿class Remote{…};class Tv{…};
3、其它友元关系
让类彼此之间正式成为旁人的友元来同时实现。
4、协力的友元
表达式须要出访三个类的专有统计数据时。
二、嵌套类
在另一个类中新闻稿的类被称作嵌套类(nested class),它透过提供新的类型类作用与来避免名称混乱。包含类的核心成员表达式能创建和采用被嵌套类的对象;而仅当新闻稿坐落于私有部份,才能在包含类的外面采用嵌套类,而且必须采用作用域解析运算符。
1、嵌套类和出访权限
嵌套类、结构和枚举的作用域特征:
对嵌套类的出访控制权的控制规则与常规类相同。
2、模板中的嵌套
北埃尔普表述转换为模板时,不会由于它包含嵌套类带来难题。
3、极度
(1)调用abort()abort()表达式的原型坐落于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr采用的错误流)发送消息abnomal program termination(程序极度终止),然后终止程序。它还返回一个随同时实现而异的值,告诉操作系统(或父级进程),处理失败。
(2)返回错误码一种比极度终止更灵活的形式是,采用表达式的返回值来指出难题。
(3)极度机制 C++极度时对程序运行操作过程中发生的极度情况的一种响应。极度提供了将控制权从程序的一个部份传递到另一个部份的途径。对极度的处理由3个部份组成:
引发极度;采用处理程序捕获极度;采用try块。
throw关键字表示引发极度,紧随其后的值(例如字符串和对象)指出了极度的特征。 catch关键字表示捕获极度。 try块标识其中特定的极度可能被激活的标识符块,它后面跟一个或多个catch块。
try{ uint z =1 -2;}catch{ std::cout <<“计算结果超出范围”<
执行throw语句类似于执行返回语句,因为它也将终止表达式的执行;但不是将控制权返回给调用程序,而是导致程序沿表达式调用序列后退,直到找到包含try块的表达式。
(4)将对象用作极度类型通常,引发极度的表达式将传递一个对象。这种做得重要优点之一是,能采用不同的极度类型来区分不同的表达式在不同情况下引发的极度。另外,对象能携带信息,程序员能根据这些信息来确定引发极度的原因。同时,catch块能根据这些信息来决定采取什么措施。
(5)极度规范和C++11 C++98新增,C++11已摒弃。
(6)栈解退假设try块设有直接调用引发极度的表达式,而是调用了对引发极度的表达式展开调用的表达式,则程序流程将从引发极度的表达式跳到包含try块和处理程序的表达式。这涉及到栈解退(unwinding the stack)。
(7)其它极度特性引发极度时编译器总是创建一个临时拷贝,即使极度规范和catch块中指定的是引用。基类引用能执行派生类对象。应将捕获坐落于层次结构最下面的极度类的catch语句放在最前面,将捕获基类极度的catch语句放在最后面。采用省略号来表示极度类型,从而捕获任何极度:
catch(…){//statements}
在catch语句中采用基类对象时,将捕获所有的派生类对象,但派生特性将被剥去,因此将采用虚形式的基类版本。
(8)exception类 exception头文件(以前为exception.h或except.h)表述了exception类,C++能把它用作其它极度类的基类。
C++提供了一种在失败时返回空指针的new:
int * pi = new (std::nothrow) int;
(9)极度、类和继承极度、类和继承以三种形式相互关联。首先,能像标准C++库所做的那样,从一个极度类派生出另个一个;其次,能在类表述中嵌套极度类新闻稿来组合极度;最后,这种嵌套新闻稿本身可被继承,还可用作基类。
(10)极度何时会迷失方向虽然C++11摒弃了极度规范,但仍支持它,且有些现有的标识符采用了它。
(11)有关极度的注意事项采用极度会增加程序标识符,降低程序的运行速度。极度规范不适用于模板,因为模板表达式引发的极度可能随特定的具体化而异。极度和动态内存分配并非总能协同工作。
四、RTTI
RTTI是运行阶段类型识别(Runtime Type Identification)的简称。这是新添加到C++中的特性之一,很多老式同时实现不支持。
C++有3个支持RTTI的元素。
如果可能的话,dynamiccast运算符将采用一个指向基类的指针来生成一个指向派生类的指针;否则,该运算符返回0——空指针。typeid运算符返回一个指出对象的类型的值。typeinfo结构存储了有关特定类型的信息。
Superb * pm = dynamiccast(pg);
五、类型转换运算符
类型转换运算符:
dynamiccastconstcaststaticcastreinterpretcast
C++ Primer Plus自学讲义国际协会元、极度和其它