07 2016 档案

摘要:static_cast、reinterpret_cast、const_cast和dynamic_cast 1.static_cast 用来进行比较“自然”和低风险的转换,比如整形和实数型、字符型之间互相转换。 不能在不同类型类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类 阅读全文
posted @ 2016-07-09 11:18 helloforworld 阅读(5838) 评论(0) 推荐(0)
摘要:可以用某种顺序容器来实现 (让已有的顺序容器以栈/队列的方式工作) 1) stack: 头文件 <stack> 栈 -- 后进先出 2) queue: 头文件 <queue> 队列 -- 先进先出 3) priority_queue: 头文件 <queue> 优先级队列 -- 最高优先级元素总是第一 阅读全文
posted @ 2016-07-09 11:15 helloforworld 阅读(440) 评论(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 阅读(259) 评论(0) 推荐(0)
摘要:set, multiset, map, multimap 内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。 除了各容器都有的函数外,还支持以下成员函数。 find:查找等于某个值的元素(x<y和y<x同时不成立即为相等) lower_bound:查找某个下界 upper_bound:查找 阅读全文
posted @ 2016-07-09 10:57 helloforworld 阅读(249) 评论(0) 推荐(0)
摘要:C++中有两个方面体现重用: 面向对象的思想:继承和多态,标准类库 泛型程序设计的思想:模板机制,以及标准模板库STL 标准模板库就是一些常用数据结构和算法的模板的集合。 容器:容纳各种数据类型的通用数据结构,是类模板。 迭代器:可用于依次存取容器中的元素,类似于指针 算法:用来操作容器中的元素的函 阅读全文
posted @ 2016-07-09 10:54 helloforworld 阅读(471) 评论(0) 推荐(0)
摘要:若一个类重载了运算符“()”,则该类的对象就成为函数对象。函数对象可以用于标准库算法。函数对象和函数指针很相似,但也有区别。当函数对象使用模板时可以赋值给函数指针。 函数运行结果: 参考链接: https://www.coursera.org/learn/cpp-chengxu-sheji 阅读全文
posted @ 2016-07-09 10:43 helloforworld 阅读(206) 评论(0) 推荐(0)
摘要:泛型程序设计 算法实现时不指定具体要操作的数据的类型。适用于多种数据结构。 函数模板 Template <class 类型参数1,class类型参数2,…..> 返回值类型 模板名(形参表) { 函数体; } 函数模板可以重载,只要它们的形参表不同即可。 C++编译器遵循以下优先顺序: 先找参数完全 阅读全文
posted @ 2016-07-09 10:33 helloforworld 阅读(355) 评论(0) 推荐(0)
摘要:文件和流 顺序文件 一个有限字符构成的顺序字符流 C++标准库中:ifstream,ofstream和fstream共3个类用于文件操作统称为文件流类。 文件操作 使用/创建文件的基本流程 建立顺序文件 也可以先创建ofstream对象,再用open函数打开ofstream fout;fout.op 阅读全文
posted @ 2016-07-09 10:28 helloforworld 阅读(155) 评论(0) 推荐(0)
摘要:通过基类的指针在删除派生类对象时只调用了基类的析构函数,而没有调用派生类的析构函数,因此在有些程序中会存在问题。(例如需要在构造函数与析构函数中进行计数统计的程序) 实际效果: 删除一个派生类对象时 解决办法: 把基类的析构函数声明为virtual 派生类的析构函数virtual不用声明 通过基类的 阅读全文
posted @ 2016-07-09 10:26 helloforworld 阅读(409) 评论(0) 推荐(0)
摘要:多态实现的关键 虚函数表 每一个有虚函数的类(或有虚函数的类的派生类)都有一个虚函数表,该类的任何对象中都放着虚函数表的指针。虚函数表中列出了该类的虚函数地址。多出来的4个字节就是用来存放虚函数表的地址的。 多态的函数调用语句被编译成一系列根据基类指针所指向的(或基类引用所引用的)对象中存放的虚函数 阅读全文
posted @ 2016-07-09 10:10 helloforworld 阅读(1145) 评论(0) 推荐(0)
摘要:在类的定义中,前面有virtual关键字的成员函数就是虚函数。多态是通过虚函数来实现的。 Class base{ Virtual int get(); }; Int base::get() { } Virtual 关键字只用在类定义里的函数声明中,写函数体时不用。 构造函数和静态成员函数不能是虚函数 阅读全文
posted @ 2016-07-09 10:08 helloforworld 阅读(2360) 评论(0) 推荐(0)
摘要:派生类对象包含基类对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具体形式: 构造函数名(形参表):基类名(基类构造函数实参表) { } 析构函数先调用派生类的构造函数,再调用基类的析构函数。 创建派生类的对象时,执行派生类的构造函数之前: 调用基类的构造函数 初始化派生类 阅读全文
posted @ 2016-07-09 10:06 helloforworld 阅读(632) 评论(0) 推荐(0)
摘要:继承:定义新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。 派生类一经定义后,可以独立使用,不依赖于基类。 派生类拥有基类的 阅读全文
posted @ 2016-07-09 10:04 helloforworld 阅读(536) 评论(0) 推荐(0)
摘要:前置运算符重载为一元运算符,后置运算符重载为二元运算符。 Operator int() { return n; } int作为一个强制类型转换运算符被重载, Demo s; (int)s; //等效于s.int(); 强制类型转换运算符重载时, 不能写返回值类型 实际上其返回值类型 强制类型转换运算 阅读全文
posted @ 2016-07-09 10:03 helloforworld 阅读(375) 评论(0) 推荐(0)
摘要:cout是在iostream中定义的,是ostream类的对象。cin是istream类的对象。测试代码如下: 参考链接: https://www.coursera.org/learn/cpp-chengxu-sheji 阅读全文
posted @ 2016-07-09 09:53 helloforworld 阅读(507) 评论(0) 推荐(0)
摘要:程序代码如下,主要结合了运算符重载的特点进行数组类的设计。实现了数组的插入,复制等功能,通过这个程序对vector容器有了一定的了解。 阅读全文
posted @ 2016-07-09 09:49 helloforworld 阅读(180) 评论(0) 推荐(0)
摘要:1.返回非引用类型。 函数运行结束时,会释放掉临时变量,但临时变量的空间即地址和空间的值不会被释放掉。因此不能返回临时变量的指针和引用。指针应该是和其所指向的对象同时存在的,不能让其成为悬垂指针,这样可能导致程序崩溃。 函数的返回值用于初始化在调用函数处所创建的临时对象。临时对象的初始化方法和实参初 阅读全文
posted @ 2016-07-09 09:48 helloforworld 阅读(237) 评论(0) 推荐(0)
摘要:赋值运算符两边的类型可以不匹配,需要重载赋值运算符‘=’。赋值运算符只能重载为成员函数。 重载赋值运算符的意义 浅复制和深复制 S1=S2; 浅复制/浅拷贝 执行逐个字节的复制工作 深复制/深拷贝 将一个对象中指针变量指向的内容复制到另一个对象中指针成员对象指向的地方。 对operator=返回值类 阅读全文
posted @ 2016-07-09 09:25 helloforworld 阅读(541) 评论(0) 推荐(0)
摘要:定义:对抽象数据类型也能够直接使用C++提供的运算符。运算符重载能够使程序更简洁,代码更容易理解。对已有的运算符赋予多重的含义。 运算符重载的实质是函数的重载。如果将运算符重载函数作为成员函数,它可以通过this指针自由地访问本类的数据成员,因此可以少写一个函数的参数。但必须要求运算表达式第一个参数 阅读全文
posted @ 2016-07-08 11:41 helloforworld 阅读(666) 评论(0) 推荐(0)
摘要:定义对象时在前面加上const关键字,则对象的值不会改变。 在类的成员函数说明后加const关键字,则该成员函数为常量成员函数。常量成员函数不应该修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。 常量成员函数的重 阅读全文
posted @ 2016-07-08 11:38 helloforworld 阅读(2082) 评论(0) 推荐(0)
摘要:作用是指向成员函数所作用的对象。非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。静态成员函数中不能使用this指针,因为静态成员函数不具体作用于某个对象。静态成员函数的真实的参数个数就是程序中写出的参数个数。 下面是this指针代码: 参考链接: https://www.cou 阅读全文
posted @ 2016-07-08 11:35 helloforworld 阅读(136) 评论(0) 推荐(0)
摘要:私有成员只有在类的成员函数内部被访问到。一个类的友元函数可以访问该类的私有成员。 友元函数也可以为全局函数。 可以将一个类的成员函数(包括构造、析构函数)声明成另一个类的友元函数。但是,必须先定义包含成员函数的类,才能将成员函数设为友元。友元类也一样,要先定义后声明为友元类。 友元类 B是A的友元类 阅读全文
posted @ 2016-07-08 11:34 helloforworld 阅读(313) 评论(0) 推荐(0)
摘要:成员对象:类中的成员变量是另一个类的对象。包含成员对象的类叫做封闭类。 封闭类构造函数的初始化列表 定义封闭类的构造函数时,添加初始化列表: 类名::构造函数(参数表):成员变量1(参数表),成员变量2(参数表),…. { . . . } 成员对象初始化列表中的参数 任意复杂的表达式 函数/变量/表 阅读全文
posted @ 2016-07-08 11:31 helloforworld 阅读(707) 评论(0) 推荐(0)
摘要:普通成员变量是对象各自独有的,不会相互之间影响,但是静态成员变量是共用的。sizeof不会把静态成员变量计算进去。 普通成员函数必须具体作用于某个对象,而静态成员函数不具体作用于某个具体对象。静态成员访问时和普通成员访问相比多了一种即通过类名进行访问。 静态成员变量和函数本质上是全局变量和函数。我们 阅读全文
posted @ 2016-07-08 11:29 helloforworld 阅读(286) 评论(0) 推荐(0)
摘要:指针和引用一直是C++中难懂的部分,为此我也困惑了很久,下面说说我对引用和指针的简单理解。 在使用函数时我们常常会纠结实参传递到形参后,函数对形参的操作会不会改变实参的值(也就是主函数的相应变量),最典型的例子是swap(int a,int b)。我们都知道,函数在调用时会给变量重新开辟一个存储空间 阅读全文
posted @ 2016-07-08 11:16 helloforworld 阅读(228) 评论(0) 推荐(0)