摘要: c+++中任然支持c语言中的可变参数函数 c++编译器的匹配调用优先级 1.重载函数 2.函数模板 3.变参函数 存在的缺陷: 变参函数无法解析对象参数,可能造成程序崩溃 进一步的挑战: 如何让编译器精确匹配函数,但不进行实际的调用?(sizeof) 构造中的异常 构造函数抛出异常 构造过程立即停止 阅读全文
posted @ 2018-06-26 00:33 sugarwill 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 基类指针指向子类对象 基类引用成为子类对象的别名 静态类型-变量(对象)自身的类型 动态类型-指针(引用)所指向对象的实际类型 基类指针是否可以强制类型转换为子类指针取决于动态类型! c++中如何得到动态类型? 解决方案-利用多态 1.在基类中定义虚函数返回具体的类型信息 2.所有的派生类都必须实现 阅读全文
posted @ 2018-06-26 00:15 sugarwill 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 异常的概念 程序在运行过程中可能产生异常 异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对比 异常 运行时产生除0的情况 需要打开的外部文件不存在 数组访问时越界 Bug 使用野指针 堆数组 阅读全文
posted @ 2018-06-23 00:30 sugarwill 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 单例模式 需求的提出 在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance) 如何定义一个类,使得这个类最多只能创建一个对象? 要控制类的对象数目,必须对外隐藏构造函数 思路: 将构造函数的访问属性设置为private 定义instance并初始化为NULL 阅读全文
posted @ 2018-06-22 23:49 sugarwill 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 智能指针的意义 现代c++开发库中最重要的类模板之一 c++中自动内存管理的主要手段 能够在很大程度上避开内存相关的问题 STL中的智能指针auto_ptr 生命周期结束时,销毁指向的内存空间 不能指向堆数组,只能指向堆对象(变量) 一片堆空间只属于一个智能指针对象 多个智能指针对象不能指向同一片堆 阅读全文
posted @ 2018-06-22 23:28 sugarwill 阅读(519) 评论(0) 推荐(0) 编辑
摘要: 模板参数可以是数值型参数(非类型参数) template <typename T, int N> void func() { T a[N]; //使用模板参数定义局部数组 } func<double, 10>(); 数值型模板参数的限制 变量不能作为模板参数 浮点数不能作为模板参数 类对象不能作为模 阅读全文
posted @ 2018-06-22 01:27 sugarwill 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 类模板可以定义任意多个不同的类型参数 类模板可以被特化 指定类模板的特定实现 部分类型参数必须显示指定 根据类型参数分开实现类模板 类模板的特化类型 部分特化-用特定规则约束类型参数 完全特化-完全显示指定类型参数 类模板特化注意事项 特化只是模板的分开实现 本质上是同一个类模板 特化类模板的使用方 阅读全文
posted @ 2018-06-22 01:15 sugarwill 阅读(120) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-06-22 00:51 sugarwill 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 函数模版深入理解 编译器从函数模版通过具体类型产生不同的函数 编译器会对函数模版进行两次编译 对模版代码本身进行编译 对参数替换后的代码进行编译 注意事项: 函数模版本身不允许隐式类型转换 自动推导类型时,必须严格匹配 显示类型指定时,能够进行隐式类型转换 函数模版可以定义任意多个不同的类型参数 t 阅读全文
posted @ 2018-06-22 00:31 sugarwill 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 定义宏代码块 优点:代码复用,适合所有的类型 缺点:编译器不知道宏的存在,缺少类型检查 定义函数 优点:真正的函数调用,编译器对类型进行检查 缺点:根据类型重复定义函数,无法代码复用 c++中的泛型编程 函数模版 一种特殊的函数可用不同类型进行调用 看起来和普通函数很相似,区别是类型可被参数化 te 阅读全文
posted @ 2018-06-22 00:13 sugarwill 阅读(205) 评论(0) 推荐(0) 编辑