使用系统提供的标准异常
摘要:标准异常库 #incldue <stdexcept> throw out_of_range(”aaa”) 。。。 catch(out_of_range & e) cout << e.what(); #define _CRT_SECURE_NO_WARNINGS #include <iostream>
阅读全文
标准异常库
摘要:标准异常库 ① 在上述继承体系中,每个类都有提供了构造函数、复制构造函数、和赋值操作符重载。 ② logic_error类及其子类、runtime_error类及其子类,它们的构造函数是接受一个string类型的形式参数,用于异常信息的描述 ③ 所有的异常类都有一个what()方法,返回const
阅读全文
异常的多态使用
摘要:异常的多态使用 利用多态来实现 printError同一个接口调用 抛出不同的错误对象,提示不同错误 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //异常基类 class BaseException
阅读全文
异常变量的声明周期
摘要:异常变量的声明周期 如果 MyException e,会多开销一份数据 ,调用拷贝构造 如果 MyExcepiton *e , 不 new提前释放对象 new 自己管理delete 推荐 MyException &e 容易些 而且 就一份数据 #define _CRT_SECURE_NO_WARNI
阅读全文
异常的接口声明
摘要:如果想抛出特定的类型异常 ,可以利用异常的接口声明 void func() throw ( int) 只能抛出 int类型 throw() 不抛出任何类型异常 使用QT创建项目 #include "mainwindow.h" #include <QApplication> #include <QDe
阅读全文
栈解旋(unwinding)
摘要:概念 异常被抛出后,从进入try块起,到异常被抛掷前,这期间在栈上构造的所有对象,都会被自动析构。析构的顺序与构造的顺序相反,这一过程称为栈的解旋(unwinding). #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namesp
阅读全文
自定义异常
摘要:#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class myException { public: void printError() { cout << "自定义异常" << endl; } };
阅读全文
异常的基本使用
摘要:异常 异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等) try 试图执行 try{}中的内容 在可能出现异常的地方 抛出异常 throw try下面 catch捕获异常 catch( 捕获类型 )
阅读全文
重新解释转换(reinterpret_cast)
摘要:最不安全,最鸡肋 不推荐 class Base {}; class Child :public Base {}; class Other {}; //重新解释转换(reinterpre_cast) void test02() { int a = 10; int* p = reinterpret_ca
阅读全文
类型转换(常量转换和引用转换)
摘要:常量转换 不能对非指针或者非引用进行转换 对引用转换 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; void test01() { const int* p = NULL; //取出const int
阅读全文
类型转换(动态转换)dynamic_cast
摘要:动态转换 不可以转换基础数据类型 父子之间可以转换 父转子 不可以 子转父 可以 发生多态 都可以 1.基础类型不可以转换 2.父子关系 向上转 可以 向下转 不安全就不可以 注意: dynamic_cast如果发生了多态,那么可以让基类转成派生类,向下转换 #define _CRT_SECURE_
阅读全文
类型转换(静态转换:static_cast)
摘要:静态转换 使用方式 static_cast< 目标类型>(原始数据) 可以进行基础数据类型转换 父与子类型转换 没有父子关系的自定义类型不可以转换 1.普通类型 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace s
阅读全文
类模板碰到友元函数(类外实现)
摘要:难点 1.不注意普通函数加上template<> 就成了模板函数, 而友元函数声明的时普通函数, 找不到普通函数的实现链接 err1 2.类内声明了模板函数,但此时声明因为有 <>所以编译器看不到,需要在这之前先声明函数 3.声明了函数还是会报错,因为函数中的参数 Person类并没有声明,所以还要
阅读全文
类模板碰到友元函数(类内实现)
摘要:友元函数类内实现 friend void printPerson( Person<T1 ,T2> & p ) 友元函数类外实现 friend void printPerson<>(Person<T1, T2> & p); //没有<>普通函数 声明 加上 <>模板函数声明 让编译器看到 函数 并且看
阅读全文
类模板的分文件编写的问题和解决(要引入.cpp而不是头文件)
摘要:分文件解决 .h .cpp分别写声明和实现 但是由于 类模板的成员函数运行阶段才去创建,导致包含.h头文件,不会创建函数的实现,无法解析外部命令 解决方案 保护 .cpp文件 (不推荐) 不要进行分文件编写,写到同一个文件中,进行声明和实现,后缀名改为.hpp 约定俗成的 (.hpp文件即分文件模板
阅读全文
类模板的类外实现成员函数
摘要:1. template <class T1, class T2> Person<T1, T2>::Person(T1 name, T2 age) #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using n
阅读全文
类模板继承问题
摘要:基类如果是模板类,必须让子类告诉编译器 基类中的T到底是什么类型 如果不告诉,那么无法分配内存,编译不过 利用参数列表class Child :public Base<int> #define _CRT_SECURE_NO_WARNINGS #include <iostream> using nam
阅读全文
查看数据类型
摘要:1. typeid(T).name(); //可以查看泛型传入的时什么类型数据
阅读全文
类模板做函数参数
摘要:三种方式 显示指定类型 参数模板化 整体模板化 实例: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; //类模板 template<class NameT, cla
阅读全文
类模板基本使用
摘要:类模板 语法:template <T…> 紧跟着是类 区别: 与函数模板区别,可以有默认类型参数 函数模板可以进行自动类型推导,而类模板不可以 类模板中的成员函数 一开始不会创建出来,而是在运行时才去创建 #define _CRT_SECURE_NO_WARNINGS #include <iostr
阅读全文