摘要: static_cast、reinterpret_cast、const_cast和dynamic_cast 1.static_cast 用来进行比较“自然”和低风险的转换,比如整形和实数型、字符型之间互相转换。 不能在不同类型类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类 阅读全文
posted @ 2016-07-09 11:18 helloforworld 阅读(5768) 评论(0) 推荐(0) 编辑
摘要: 可以用某种顺序容器来实现 (让已有的顺序容器以栈/队列的方式工作) 1) stack: 头文件 <stack> 栈 -- 后进先出 2) queue: 头文件 <queue> 队列 -- 先进先出 3) priority_queue: 头文件 <queue> 优先级队列 -- 最高优先级元素总是第一 阅读全文
posted @ 2016-07-09 11:15 helloforworld 阅读(429) 评论(0) 推荐(0) 编辑
摘要: map/multimap里放着的都是pair模板类的对象,且按first从小到大排序。 pair 模板: template <class _T1, class _T2> struct pair { typedef _T1 first_type; typedef _T2 second_type; _T 阅读全文
posted @ 2016-07-09 11:00 helloforworld 阅读(254) 评论(0) 推荐(0) 编辑
摘要: set, multiset, map, multimap 内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。 除了各容器都有的函数外,还支持以下成员函数。 find:查找等于某个值的元素(x<y和y<x同时不成立即为相等) lower_bound:查找某个下界 upper_bound:查找 阅读全文
posted @ 2016-07-09 10:57 helloforworld 阅读(244) 评论(0) 推荐(0) 编辑
摘要: C++中有两个方面体现重用: 面向对象的思想:继承和多态,标准类库 泛型程序设计的思想:模板机制,以及标准模板库STL 标准模板库就是一些常用数据结构和算法的模板的集合。 容器:容纳各种数据类型的通用数据结构,是类模板。 迭代器:可用于依次存取容器中的元素,类似于指针 算法:用来操作容器中的元素的函 阅读全文
posted @ 2016-07-09 10:54 helloforworld 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 若一个类重载了运算符“()”,则该类的对象就成为函数对象。函数对象可以用于标准库算法。函数对象和函数指针很相似,但也有区别。当函数对象使用模板时可以赋值给函数指针。 函数运行结果: 参考链接: https://www.coursera.org/learn/cpp-chengxu-sheji 阅读全文
posted @ 2016-07-09 10:43 helloforworld 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 泛型程序设计 算法实现时不指定具体要操作的数据的类型。适用于多种数据结构。 函数模板 Template <class 类型参数1,class类型参数2,…..> 返回值类型 模板名(形参表) { 函数体; } 函数模板可以重载,只要它们的形参表不同即可。 C++编译器遵循以下优先顺序: 先找参数完全 阅读全文
posted @ 2016-07-09 10:33 helloforworld 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 文件和流 顺序文件 一个有限字符构成的顺序字符流 C++标准库中:ifstream,ofstream和fstream共3个类用于文件操作统称为文件流类。 文件操作 使用/创建文件的基本流程 建立顺序文件 也可以先创建ofstream对象,再用open函数打开ofstream fout;fout.op 阅读全文
posted @ 2016-07-09 10:28 helloforworld 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 通过基类的指针在删除派生类对象时只调用了基类的析构函数,而没有调用派生类的析构函数,因此在有些程序中会存在问题。(例如需要在构造函数与析构函数中进行计数统计的程序) 实际效果: 删除一个派生类对象时 解决办法: 把基类的析构函数声明为virtual 派生类的析构函数virtual不用声明 通过基类的 阅读全文
posted @ 2016-07-09 10:26 helloforworld 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 多态实现的关键 虚函数表 每一个有虚函数的类(或有虚函数的类的派生类)都有一个虚函数表,该类的任何对象中都放着虚函数表的指针。虚函数表中列出了该类的虚函数地址。多出来的4个字节就是用来存放虚函数表的地址的。 多态的函数调用语句被编译成一系列根据基类指针所指向的(或基类引用所引用的)对象中存放的虚函数 阅读全文
posted @ 2016-07-09 10:10 helloforworld 阅读(1078) 评论(0) 推荐(0) 编辑
摘要: 在类的定义中,前面有virtual关键字的成员函数就是虚函数。多态是通过虚函数来实现的。 Class base{ Virtual int get(); }; Int base::get() { } Virtual 关键字只用在类定义里的函数声明中,写函数体时不用。 构造函数和静态成员函数不能是虚函数 阅读全文
posted @ 2016-07-09 10:08 helloforworld 阅读(2329) 评论(0) 推荐(0) 编辑
摘要: 派生类对象包含基类对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具体形式: 构造函数名(形参表):基类名(基类构造函数实参表) { } 析构函数先调用派生类的构造函数,再调用基类的析构函数。 创建派生类的对象时,执行派生类的构造函数之前: 调用基类的构造函数 初始化派生类 阅读全文
posted @ 2016-07-09 10:06 helloforworld 阅读(622) 评论(0) 推荐(0) 编辑
摘要: 继承:定义新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。 派生类一经定义后,可以独立使用,不依赖于基类。 派生类拥有基类的 阅读全文
posted @ 2016-07-09 10:04 helloforworld 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 前置运算符重载为一元运算符,后置运算符重载为二元运算符。 Operator int() { return n; } int作为一个强制类型转换运算符被重载, Demo s; (int)s; //等效于s.int(); 强制类型转换运算符重载时, 不能写返回值类型 实际上其返回值类型 强制类型转换运算 阅读全文
posted @ 2016-07-09 10:03 helloforworld 阅读(323) 评论(0) 推荐(0) 编辑
摘要: cout是在iostream中定义的,是ostream类的对象。cin是istream类的对象。测试代码如下: 参考链接: https://www.coursera.org/learn/cpp-chengxu-sheji 阅读全文
posted @ 2016-07-09 09:53 helloforworld 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 程序代码如下,主要结合了运算符重载的特点进行数组类的设计。实现了数组的插入,复制等功能,通过这个程序对vector容器有了一定的了解。 阅读全文
posted @ 2016-07-09 09:49 helloforworld 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1.返回非引用类型。 函数运行结束时,会释放掉临时变量,但临时变量的空间即地址和空间的值不会被释放掉。因此不能返回临时变量的指针和引用。指针应该是和其所指向的对象同时存在的,不能让其成为悬垂指针,这样可能导致程序崩溃。 函数的返回值用于初始化在调用函数处所创建的临时对象。临时对象的初始化方法和实参初 阅读全文
posted @ 2016-07-09 09:48 helloforworld 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 赋值运算符两边的类型可以不匹配,需要重载赋值运算符‘=’。赋值运算符只能重载为成员函数。 重载赋值运算符的意义 浅复制和深复制 S1=S2; 浅复制/浅拷贝 执行逐个字节的复制工作 深复制/深拷贝 将一个对象中指针变量指向的内容复制到另一个对象中指针成员对象指向的地方。 对operator=返回值类 阅读全文
posted @ 2016-07-09 09:25 helloforworld 阅读(521) 评论(0) 推荐(0) 编辑