随笔分类 - C++
摘要:C++异常处理的真正能力不仅在于它可以处理各种不同类型的异常, 也在于它可以具有为异常对象抛出前try内构造的所有局部对象调用析构函数的能力 在程序中, 找到一个匹配的catch异常处理后, 如果catch子句的异常类型声明是一个值参数, 则其初始化方式是复制被抛掷的异常对象,如果catch子句的异
阅读全文
摘要:异常的逐层传递:如果在catch块内捕捉到一个异常, 但是该块内代码无法或者不想处理它, 可以继续抛出给上层调用者处理, 直至到最外层的封闭try块 代码示例: #include <iostream> #include <string> #include <fstream> using namesp
阅读全文
摘要:C++标准库定义了异常类层次: 1 exception类: 所有C++异常的基类, 定义在库的头文件<exception>中, 其接口定义如下:class exception{public: exception() throw(); exception(const exception &rhs) t
阅读全文
摘要:异常接口声明也称为抛出列表, 是函数界面的一部分, 一方面显式的给出了一个函数抛出异常的界面, 一方面限制了函数抛出异常的类型.通过异常接口声明可以知道调用该函数需要捕获和处理哪些异常.语法:1 指定异常<返回类型> <函数名>(<形参表>)throw(T1, T2, ..., Tn);这种异常声明
阅读全文
摘要:异常处理(exception handling)机制是用于管理程序运行期间出现的非正常情况的一种结构化方法. C+++将异常处理的异常的检测和异常处理分离, 增加了程序的可读性. 异常处理是提升程序健壮性的重要手段. 异常处理的基本思想 异常处理的概念: 程序的错误可以分为两种. 一种是编译错误,
阅读全文
摘要:C++中的文件: C++中, 文件被看作一个字符序列, 即文件是由一个个的字符顺序构成的. 即把文件视为一个字符流, 不考虑记录的界限, 这种文件又被称为流式文件. 文件的分类:<1> 按数据的存储方式分类:文本文件: 每个字节存放一个ASCII码表示一个字符的文件优点:可以字节按字符形式输出, 便
阅读全文
摘要:流类库除了提供重载的插入符和提取符外, 还提供了一些其他输入输出函数, 以满足不同的功能需求 输入流常用成员函数:1 read()函数istream& read(char *pch, int nCount); : 从输入流读取nCount个字符并将其放入pch所指的缓冲区. 如果读取字符数量少于nC
阅读全文
摘要:流: 一个字节序列, 如果流向程序, 则称这个流为输入流; 如果流出程序, 则称为输出流. 流是一个抽象的概念, 当实际进行I/O操作时, 必须将流和一种具体的物理设备联结起来 流类库: C++将输入输出有关的操作定义为一个类体系, 并将其放在一个系统库内, 以备用户调用, 该类体系叫做流类, 提供
阅读全文
摘要:重载流的插入符和提取符注意事项:1 使用友元函数的重载方式2 重载提取符返回值类型使用istream类型的引用, 第一个参数也是istream类型的引用, 第二个参数使用类的引用类型,但是不能使用const修饰 代码示例: #include <iostream> using namespace st
阅读全文
摘要:#include <iostream> #include <iomanip> using namespace std; /* 格式化输入输出: 在实际工作中, 需要按特定格式进行输入输出. C++的I/O流类库提供了两种控制格式输入输出的方法: 1 使用ios类的成员函数进行格式控制: (1) 使用
阅读全文
摘要:类模板的默认参数: 包含和通用类型相关的默认参数, 当类模板被实例化时, 如果没有指定其他类型的参数, 则使用默认参数,函数类型参数也可以给定默认值 定义默认参数语法:<typename T,.., int|&|* t,.., typename V = defaultType,..., int|&|
阅读全文
摘要:函数类型参数: 在类模板的模板参数表中必须至少有一个类参数, 还可以有非类参数的参数, 非类参数的参数被称为函数类型参数,又称为无类型模板参数, 采用语法和普通函数参数一样, 只包含参数类型和参数名. 但是只限于整型, 指针型和引用. 传递给函数类型参数的实参要么是整型常量, 要么是指向全局函数或对
阅读全文
摘要:函数模板及其重载函数根据类型匹配顺序1 首先寻找和使用最符合函数名和参数类型的特定模板函数, 找到则调用2 其次寻找一个函数模板, 将其实例化产生一个匹配的模板函数, 找到则调用3 再其次寻找可以通过类型转换进行参数匹配的函数模板实例化产生的一个匹配的模板函数, 找到则调用4 找不到, 编译报错 代
阅读全文
摘要:函数模板存在的缺陷1 可以支持隐式转换, 但调用优先级低2 对于特定的数据类型的处理需要定义特殊的普通重载函数以保证功能的正确实现 代码示例: #include <iostream> using namespace std; /* 函数模板存在的缺陷 1 可以支持隐式转换, 但调用优先级低 2 对于
阅读全文
摘要:强类型语言的特点:1 程序可靠性较高:在编译运行前必须经过严格的类型检查, 达到在运行前就检查出类型不兼容的错误.2 灵活性较低: 对于默写处理逻辑完全一样, 但是数据类型不同的变量的操作必须按照类型分别定义. 解决强类型的严格性和灵活性的冲突的途径:1 使用宏函数: 方便, 但是可能不带来其他安全
阅读全文
摘要:强类型语言的特点:1 程序可靠性较高:在编译运行前必须经过严格的类型检查, 达到在运行前就检查出类型不兼容的错误.2 灵活性较低: 对于默写处理逻辑完全一样, 但是数据类型不同的变量的操作必须按照类型分别定义. 解决强类型的严格性和灵活性的冲突的途径:1 使用宏函数: 方便, 但是可能不带来其他安全
阅读全文
摘要:虚析构函数: 使用virtual关键字修饰的析构函数 C++不支持虚构造函数, 但支持虚析构函数, 由于析构函数没有参数, 一个类只能有一个虚析构函数 虚析构函数的必要性: 使用基类的引用或者指向基类类型的指针调用析构函数完成派生类对象的析构(delete操作符自动调用对象的析构函数) 代码示例:
阅读全文
摘要:纯虚函数: 不能在基类中给出实现, 但是要求所有派生类必须覆盖(重写)或也声明为纯虚函数的虚函数函数作用: 给所有派生类提供一个操作接口定义纯虚函数的语法:virtual 返回值类型 函数名(<参数列表>) = 0{ <函数体>} 调用抽象类的纯虚函数需要使用完全限定函数名(带作用域分辨符) 抽象类
阅读全文
摘要:析构函数中虚函数的调用采用静态联编即构造函数和析构函数调用自己类中定义的虚函数, 而不会调用派生类中声明的虚函数即 代码示例: #include <iostream>using namespace std; /*析构函数中虚函数的调用采用静态联编即构造函数和析构函数调用自己类中定义的虚函数, 而不会
阅读全文
摘要:虚函数: 一个成员函数, 该函数在基类的内部声明并且被派生类重新定义, 为了创建虚函数, 应在基类该函数声明的前面加上virtual关键字如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要. 动
阅读全文

浙公网安备 33010602011771号