上一页 1 ··· 51 52 53 54 55 56 57 58 59 ··· 75 下一页
摘要: 1、只有在定义之后,类才可以用作多重继承的基类。按照基类构造函数在派生列表中的出现次序调用。 2、多重继承中,派生类的指针或引用可以转换为任意基类的指针或引用。 3、当一个类继承于多个基类的时候,那些基类之间没有隐含的关系,不允许使用一个基类的指针访问其它基类的成员。 4、在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象。 5、特定派生类实例的优先级... 阅读全文
posted @ 2011-04-16 10:18 浪里飞 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 1、命名空间能够划分全局命名空间。一个命名空间是一个作用域。2、命名空间可以在全局作用域或其它作用域内部定义,但不能在函数或类内部定义。可以在命名空间中放入可以出现在全局作用域的任意声明。3、命名空间作用域不能以分号结束。4、命名空间是累积的。一个命名空间的分离部分可以分散在多个文件中。示例namespace namespace_name{} 既可以定义新的命名空间,也可以添加到现存命名空间中。5、命名空间定义可以不连续意味着,可以用分离的接口文件和实现文件构成命名空间。因此,可以用与管理自己的类和函数定义相同的方法来组织命名空间。示例namespace cplusplus_primer { 阅读全文
posted @ 2011-04-15 22:46 浪里飞 阅读(501) 评论(0) 推荐(0) 编辑
摘要: 1、auto_ptr为标准库提供的“资源分配即初始化”类,是接受一个类型形参的模板,它为动态分配的对象提供异常安全特性。在memory头文件中定义。2、auto_ptr操作auto_ptr<T> ap;创建名为 ap 的未绑定的 auto_ptr 对象auto_ptr<T>ap(p);创建名为 ap 的 auto_ptr 对象,ap 拥有指针 p 指向的对象。该构造函数为 explicitauto_ptr<T> ap1(ap2); 创建名为 ap1 的 auto_ptr 对象,ap1 保存原来存储在ap2 中的指针。将所有权转给 ap1,ap2 成为未绑定的 阅读全文
posted @ 2011-04-15 17:39 浪里飞 阅读(1116) 评论(0) 推荐(0) 编辑
摘要: 1、类成员的指针不同于指向普通数据或函数的指针,普通指针只根据对象或函数的类型而变化,而成员的指针必须反映成员所属的类。2、异常是通过抛出对象而引发的。该对象的类型决定应该激活哪个处理代码。被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。异常以类似于将实参传递给函数的方式抛出和捕获。异常可以是可传给非引用形参的任意类型的对象,这意味着必须能够复制该类型的对象。传递数组或函数类型实参的时候,该实参自动转换为一个指针。被抛出的对象将发生同样的自动转换,因此,不存在数组或函数类型的异常。相反,如果抛出一个数组,被抛出的对象转换为指向数组首元素的指针,类似地,如果抛出一个函数,函 阅读全文
posted @ 2011-04-14 23:18 浪里飞 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 1、用const char*实参调用如下模板,则比较的是指针值,而不是指向的字符串。此时需要模板特化。示例template <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) return 1; return 0;}2、函数模板的特化:一个或多个模板形参的实际类型或实际值是指定的。• 关键字 template 后面接一对空的尖括号(<>);• 再接模板名和一对尖括号,尖括号中指定这个特化定义的模板形参;• 函数形参表;• 阅读全文
posted @ 2011-04-11 13:44 浪里飞 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 1、当函数的返回值必须与形参表中所用的所有类型都不同时,有必要覆盖模板实参推断机制,显式指定为模板形参所用的类型或值。示例sum(static_cast<int>(s), i); 2、指定返回类型的一种方式是引入第三个模板实参:示例template <class T1, class T2, class T3>T1 sum(T2, T3);// poor design: Users must explicitly specify all three template parameterstemplate <class T1, class T2, class T3&g 阅读全文
posted @ 2011-04-10 18:03 浪里飞 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 1、问题描述:给定n个数,求相邻的k个数之和为最大。要求给出复杂度较小的一种算法再解决这个问题前,先了解一下类似的常见问题。2、给定一串数字(可正可负的int,放在数组Num里),要求找到起始位置start和终止位置end,使得从start位置到end位置的所有数字之和最大,返回这个最大值max。算法思想:用动态规划算法实现。设 iMaxSum 为以 iNumPar[i] 终止且包含 iNumPar[i] 的最大序列的和,有: iMaxSum = iNumPar[0]; iMaxSum = iMaxSum > 0 ? iMaxSum + iNumPar[i+1] : iNumPar[i+ 阅读全文
posted @ 2011-04-02 14:18 浪里飞 阅读(857) 评论(1) 推荐(0) 编辑
摘要: 1、所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。2、模板是泛型编程的基础。3、面向对象编程的多态性称为运行是多态性,应用于存在继承关系的类,我们能够编写这样的代码,忽略于基类与派生类之间的类型差异。泛型编程所依赖的多态称为编译时多态性或参数式多态性。4、模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。示例代码template <typename T& 阅读全文
posted @ 2011-04-01 21:34 浪里飞 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 1、在继承情况下,派生类的作用域嵌套在基类作用域中。正是这种类作用域的层次嵌套使我们能够直接访问基类的成员。2、与基类成员同名的派生类成员将屏蔽对基类成员的访问。可以使用作用域操作符访问被屏蔽的基类成员。3、在基类和派生类中使用同一名字的成员函数,其行为与数据成员一样:在派生类作用域中派生类成员将屏蔽基类成员。即使函数原型不同,基类成员也会被屏蔽。4、通过派生类对象调用基类对象时,实参必须与派生类中定义的版本相匹配,只有在派生类根本没有定义该函数时,才考虑基类函数。如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有的版本,要么一个也不重定义。可以通过using为基类成员函数 阅读全文
posted @ 2011-03-29 19:47 浪里飞 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 1、每个派生类对象包含一个基类部分。因此派生类对象也是基类对象。可以将派生类对象的引用转换为基类子对象的引用,同理指针。2、没有从基类引用(或基类指针)到派生类引用(或派生类指针)的(自动)转换。3、编译器不会自动将派生类型对象转换为基类类型对象。4、用派生类对象对基类对象进行初始化(或赋值)时,将发生切割。示例Item_base item; // object of base typeBulk_item bulk; // object of derived type// ok: uses Item_base::Item_base(const Item_base&) construct 阅读全文
posted @ 2011-03-28 22:13 浪里飞 阅读(360) 评论(0) 推荐(0) 编辑
上一页 1 ··· 51 52 53 54 55 56 57 58 59 ··· 75 下一页