oj1026
摘要:方法:遍历算法 Problem Description The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has to rescue our pretty Princess. Now he gets
阅读全文
posted @
2017-03-25 11:19
郑哲
阅读(273)
推荐(0) 编辑
oj1025
摘要:方案:二分查找+动态规划 Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which are located in two parallel lines.Ha
阅读全文
posted @
2017-03-25 10:01
郑哲
阅读(218)
推荐(0) 编辑
使用虚函数的不同模式
摘要:1.派生类定义一个新的实现。 2.派生类覆盖但是增加基类函数的功能(大多数情况)
阅读全文
posted @
2017-03-23 11:39
郑哲
阅读(151)
推荐(0) 编辑
继承和动态规划的危险
摘要:1.面向对象的编程中,我们希望尽可能减少类之间的依赖行。这样能让类更加强健,更加容易维护。 但继承却与次背道而驰。 每个派生类十分依赖它的基类(或多个类),如果基类的接口发生改动,所以派生类都不得不为了适应基类的接口而改动。 (这是我们为什么总力争设计出几乎无需修改的基类) 2.动态绑定的开销。非虚
阅读全文
posted @
2017-03-23 11:22
郑哲
阅读(93)
推荐(0) 编辑
抽象类的用途
摘要:1.抽象基类提供了统一的借口,用于处理各种不同的派生类。 2.抽象类将实现的责任交给了派生类。 其中一个派生类的实现:
阅读全文
posted @
2017-03-23 10:50
郑哲
阅读(410)
推荐(0) 编辑
延期类
摘要:例如我们在计算个人资产净值时,汽车,珠宝,不动产,股票,银行存款都是个人资产的不同类型。 所谓净值是资产的当前现金价值。汽车的净值根据它的保养情况,行驶里程,使用年限有关。 而珠宝的净值会随年限增长,也就是说不能用一个函数来实现计算净值 实现ComputeNetWorth()是很难的 我们希望保证T
阅读全文
posted @
2017-03-23 10:28
郑哲
阅读(156)
推荐(0) 编辑
构造函数和虚函数
摘要:结果输出: Executing B::f(); Object d was created successfully Executing D::f() 原因:因为在D完全创建之前,B已经被创建。 所以先调用B的f(); D创建完后,根据动态性调用D的f(); 一般和特殊的关系: 像TPerson中的P
阅读全文
posted @
2017-03-22 16:29
郑哲
阅读(246)
推荐(0) 编辑
虚析构函数的要求
摘要:p=sp; 让p指向了sp中的TPerson部分; 当delete p时,只释放了TPerson的部分,但没有释放TStudent的动态分配的部分,并且TStudent类已经无法使用,所以导致严重的内存泄露。 所以我们将在TPerson类的析构函数中加上virtual关键字。 改动后,通过p调用de
阅读全文
posted @
2017-03-22 16:00
郑哲
阅读(103)
推荐(0) 编辑
重载和覆盖的区别
摘要:1重载:重载完全是一个编译时(或静态)的概念。 如果声明了同名函数,编译器会在编译时处理这些同名函数的调用问题,确定调用哪一个函数。 因此,在运行时不存在涉及调用重载函数的额外开销。 2覆盖:覆盖时运行时的概念,它在运行时从一组被覆盖的函数中选择一个函数。有额外的开销,但是基本可以忽略不计。
阅读全文
posted @
2017-03-22 15:42
郑哲
阅读(462)
推荐(0) 编辑
多态的含义
摘要:void DisplayOutput(const TPerson& aPerson) { aPerson.Print(); } DisplayOutput()函数的参数是对TPerson类对象的引用。 但是在DisplayOutput中传入TStudent,TTeacher,又会有不同的实现(在TP
阅读全文
posted @
2017-03-20 11:19
郑哲
阅读(139)
推荐(0) 编辑
动态绑定的开销
摘要:因为静态绑定的函数,在编译时已明确了所要调用的函数,所要运行时没有决定调用正确函数的开销 动态绑定的开销: C++中都保存了一个类方法的特定表,并在查找正确函数时使用该表。 需要注意的是:找到正确的函数并不涉及链表或表进行任何查找,这是瞬间直接地查找过程。 表中储存了所有方法的地址,调用动态绑定的函
阅读全文
posted @
2017-03-20 11:14
郑哲
阅读(94)
推荐(0) 编辑
动态绑定
摘要:动态绑定的支持————虚函数 只有函数前带有virtual的才是虚函数,其他函数不是虚函数 一旦在类中声明成员函数是虚函数,那么它(成员函数)将在所有的子类中保留其动态绑定的性质 例如,Print在TStudent中都是虚函数。 注意:virtual关键字只允许在声明中使用,不允许在成员函数定义中使
阅读全文
posted @
2017-03-20 11:03
郑哲
阅读(84)
推荐(0) 编辑
静态绑定(前期绑定)
摘要:正常情况下,若基类和派生类中有相同函数,当通过派生类调用时,调用派生类中的实现; 此处的displayOutput函数 void DisplayOutput(const TPerson& aPerson) 根据多态置换原则,调用引用派生类时,依然视作一个aPerson; 所有调用aPerson::p
阅读全文
posted @
2017-03-20 10:51
郑哲
阅读(98)
推荐(0) 编辑
继承的一些优点
摘要:1.继承让设计者和程序员无需付出重新编译的代价,只需重新链接,即可扩展和增强软件功能。 比如TStudent是从TPerson派生而来的。我们就不需要重写PrintMaillingLabel函数。 这样我们无需修改现有代码,便可以在当前系统中加入新类。 在许多实现中,不用停止允许程序,便可将新类添加
阅读全文
posted @
2017-03-16 22:19
郑哲
阅读(194)
推荐(0) 编辑
多态置换原则初始化基类对象
摘要:1 #include "TStudent.h" 2 3 enum EStudentStatus //大学生系别不同,用枚举分类 4 { 5 eFullTime, ePartTime, eExchange 6 }; 7 8 //每学期,每名大学生允许注册的课程数目 9 const short MAX_COURSES_FOR_STUDENT = 5;//短整型常量 1...
阅读全文
posted @
2017-03-16 22:09
郑哲
阅读(161)
推荐(0) 编辑
多态置换原则
摘要:虽然PrintMaillngLabel函数要一个TPerson类对象,我们仍然可以传递TPerson的派生类对象给它,因为任何TPerson的派生类都is-a(“是一个”)TPerson。
阅读全文
posted @
2017-03-16 21:25
郑哲
阅读(167)
推荐(0) 编辑
杭电oj1024 Max Sum Plus Plus
摘要:Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more diffi
阅读全文
posted @
2017-03-15 16:20
郑哲
阅读(409)
推荐(0) 编辑
zju1196-Fast Food
摘要:1 #include 2 using namespace std; 3 4 5 int i, j, m; 6 int *d;//沿高速公路n个快餐店的位置 7 int n, k;//饭店的数量,仓库的数量 8 int cost[202][202]; 9 int dis[205][205]; 10 int temp; 11 12 13 void madecost(...
阅读全文
posted @
2017-03-15 16:19
郑哲
阅读(189)
推荐(0) 编辑
ZJU1183-Scheduling Lectures
摘要:1 #include 2 using namespace std; 3 4 int n; //主题的数量 5 int L, C; //每节课的时间,常量C 6 int *time; //每个主题需要的时间 7 int *minLec; //主题1~i(1=0; j--) 32 { 33 sum += time[j ...
阅读全文
posted @
2017-03-15 15:35
郑哲
阅读(153)
推荐(0) 编辑
const
摘要:const char* a; 常量指针,通过指针a不能修改a所指地址的值; char *b; b=a;是错误的,const char*不能赋值给char*类型 但是可以通过另外的方法取赋值 b = (char*)a; *b = 'b'; cout << *b << endl; 强制类型转换,这样就可
阅读全文
posted @
2017-03-14 22:44
郑哲
阅读(121)
推荐(0) 编辑
写时复制
摘要:概念:在有些大型类中复制一个类要花费大量时间。 如 TString one("abcd"); TString two(one); 这时写时复制就可以解决这个问题,所有复制对象共用原对象,当要改变对象的数据成员时才产生一个新的副本。 .head .cpp; 思考:在上面的代码中,很多地方都需要创建、删
阅读全文
posted @
2017-03-13 14:58
郑哲
阅读(312)
推荐(0) 编辑
信号量示例
摘要:信号量(资源)的自动获得和释放: 用户在使用TSemphore这样的类时,必须记住使用Acquire成员函数来获得信号量。更重要的是,在离开函数前必须释放信号量(使用Release)。 必须记住每次退出函数时,都要释放信号量,否则会产生错误. 为了避免这样的麻烦,我们可以使用辅助类来自动获得和释放信
阅读全文
posted @
2017-03-10 18:10
郑哲
阅读(215)
推荐(0) 编辑
对象赋值的语义
摘要:若未声明或实现该赋值操作符,编译器将自动生成一个默认赋值操作符。 实现类似以下代码: 实现: 1 TPoint2D::operation = (const TPoint2D& source 2 {
阅读全文
posted @
2017-03-09 22:50
郑哲
阅读(187)
推荐(0) 编辑
对象复制的语义
摘要:1.我们没有在类中实现拷贝构造函数,那么编译器会自动产生一个默认拷贝构造函数 该拷贝构造函数将执行数据成员的逐个成员复制。类似于以下代码: 1 TPerson::TPerson(const TPerson &sourse) 2 :birthDate(sourse.birthDate),name(so
阅读全文
posted @
2017-03-09 19:48
郑哲
阅读(123)
推荐(0) 编辑
无用单元和悬挂引用
摘要:1.无用单元: 指一块存储区(或资源),该存储区虽然是程序(或进程)的一部分,但是在程序中却不可再对其引用。 按照C++的规定,我们可以说,无用单元是程序中没有指针指向的某些资源; 例如: 2.悬挂引用: 当两个指针同时指向一个地址时,通过一个指针删除了该地址的数据,另一个指针就产生了悬挂引用。 无
阅读全文
posted @
2017-03-09 19:25
郑哲
阅读(755)
推荐(0) 编辑
初始化
摘要:注:尽量初始化对象的所有数据成员,防止未初始化被调用。 1.使用构造函数初始化: ① char *name; char *address; long birthdate; ② 使用已有设置数据成员的函数 ③ 若数据成员为const类型,直接修改,则使用C++自带的初始化器; const long b
阅读全文
posted @
2017-03-09 18:06
郑哲
阅读(199)
推荐(0) 编辑
同时找出最大数和最小数
摘要:这个算法的计算次数: 1.当n是偶数,一共是n/2组,每组进行3次比较,但第一组只要一次比较,所以一共需要(3n-4)/2次比较; 2.当n是奇数,一共是(n+1)/2组,每组进行3次比较,但第一组是1次而最好一组是2次,所以一共需要(3n-3)/2次比较。 可以证明这个算法是最优的,证明可在其他书
阅读全文
posted @
2017-03-02 10:02
郑哲
阅读(247)
推荐(0) 编辑
桶排序
摘要:桶排序先把要排的小数乘一个整数,按得到整数的整数部分,放入list[整数部分]。 在用成熟的排序算法把list中的小数进行排序,因为数列较少,降低了比较的次数,从而提高效率。 缺点减少了时间,但却消耗了较多的内存。
阅读全文
posted @
2017-03-02 09:40
郑哲
阅读(159)
推荐(0) 编辑
函数返回值
摘要:类型: T f();按值返回T; T* f();返回T类对象的指针/地址; const T* f();返回指向const.T类对象的指针 T &f();返回对T对象的引用; const T& f();返回对const T对象的引用; Notes: 1.绝不能返回对局部变量的引用(或指向局部变量的指针
阅读全文
posted @
2017-03-01 19:17
郑哲
阅读(93)
推荐(0) 编辑
参数传递模式
摘要:T为一个类名. 1.void f(T x) 按值传递 :调用函数时,产生一个x的副本,函数中修改x副本的值不会修改x的值; 优点:安全,可以防止参数X在函数中不小心被修改 缺点:1.调用f函数时,因为要产生一个副本,所有要调用T类的构造函数。 2.f函数结束时,又要调用T类的析构函数 若T类是一个大
阅读全文
posted @
2017-03-01 18:51
郑哲
阅读(148)
推荐(0) 编辑