上一页 1 2 3 4 5 6 7 8 ··· 11 下一页
  2013年7月2日
摘要: 动态符号表可以用二叉查找树表示,最坏情况下,二叉查找树可完全偏斜,高度为n,其平均和最坏查找时间都是O(n);最好情况下,二叉查找树的结点尽可能靠近根节点,其平均和最坏查找时间都是O(log2n)。因而,为了得到较好的查询效率,最理想的情况是时刻保持树是一棵完全二叉树,然而,为了达到这种要求就会使插入和删除的操作付出很高的代价。对此,人们设计出在高度上相对平衡的二叉查找树,其查找、插入和删除的时间都是O(log2n)。AVL树是有Adelson-Velskii和Landis提出的,一种在高度上相对平衡的二叉查找树。由于该树的平衡性,其平均和最坏查找时间都是O(log2n),且插入和删除也只需O 阅读全文
posted @ 2013-07-02 21:26 Sophia-呵呵小猪 阅读(399) 评论(0) 推荐(0) 编辑
  2013年7月1日
摘要: 数据挖掘是知识发现(KDD)的一个步骤,它可以从数据库、数据仓库以及文本数据、多媒体数据中挖掘出有用的模式或知识。一 数据挖掘的功能数据挖掘的功能主要包含特征化与区分,频繁模式、关联和相关性挖掘,分类与回归,聚类分析和离群点分析。一般而言这种任务分为描述性和预测性两种,描述性挖掘任务刻画目标数据中数据的一般性质,预测性挖掘任务在当前数据上进行归纳,以便做出预测。(1)特征化与区分数据特征化是目标类数据的一般特性或特征的汇总。例如假设AllElec是一家大型的公司,AllElec的客户关系经理提出数据挖掘任务:“汇总一年之内在AllElec花费500美元以上的顾客特征。”其结果可能是顾客的概况, 阅读全文
posted @ 2013-07-01 17:22 Sophia-呵呵小猪 阅读(446) 评论(0) 推荐(0) 编辑
  2013年6月30日
摘要: (1)句柄类前面的章节中提到,在继承体系中,从派生类对象到基类对象的转换中最终得到的是一个基类对象,派生类的部分会被切掉,而对应的指针或引用的转换则并不改变派生类对象,而是将指针或引用绑定到派生类对象中,这样一来才可以实现运行时的动态绑定,如下:1 void get_prices(Item_Base obj, const Item_Base* pi, const Item_Base& ri)2 {3 obj.net_price(1);4 5 pi->net_price(1);6 ri->net_price(1);7 }上面的代码中,obj是基类对象,无论传进来的是基类对象还 阅读全文
posted @ 2013-06-30 19:12 Sophia-呵呵小猪 阅读(380) 评论(0) 推荐(0) 编辑
  2013年6月29日
摘要: (1)派生类中的拷贝构造函数如果派生类中定义了自己的拷贝构造函数,那么该函数中应该显示调用基类的拷贝构造函数来初始化基类部分:1 class Derived : public Base2 {3 public:4 Derived(const Derived& d)5 : Base(d)6 { }7 };如果省略了上面代码中的第5行,那么将在该派生类拷贝构造函数中调用基类的默认构造函数初始化基类部分,结果导致派生类成员是从d中拷贝过来的,而基类部分却是默认值,这与拷贝应该拷贝整个对象的初衷是违背的。(2)派生类中的赋值构造函数同拷贝构造函数一样,派生类定义中应... 阅读全文
posted @ 2013-06-29 22:06 Sophia-呵呵小猪 阅读(955) 评论(0) 推荐(0) 编辑
摘要: 基类的构造函数不可以被继承,可以为public, protected, private,如果某个构造函数只希望能被派生类访问,那么可以设置为protected。(1)派生类构造函数先调用基类的构造函数在创建一个派生类对象时,需要调用派生类的构造函数,由于派生类对象都包含了一个或多个基类子对象,因此会在构造函数中首先调用基类的构造函数来创建基类子对象。如:1 class Bulk_Item : public Item_Base2 {3 public:4 Bulk_Item():min_qty(0),discount(0.0) { }5 };当要创建一个Bulk_Item对象时,首先调... 阅读全文
posted @ 2013-06-29 20:48 Sophia-呵呵小猪 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 在面向对象编程系列二中,我们看到派生类对象中包含了其基类的部分,可以说派生类对象也是基类对象,所以存在从派生类类型引用或指针到基类类型引用或指针的自动转换,即可以将派生类对象的引用转换为基类子对象的引用,指针也类似。但是,由于基类类型对象可能是一个独立的对象也可能是一个派生类对象的子对象,所以不可以将基类类型的引用或指针转换为派生类类型的引用或指针。相对于引用或指针的转换,对象的转换更为复杂。一般而言,可以使用派生类类型的对象对基类类型的对象进行初始化或赋值,但不可以将派生类类型对象直接转换为基类类型对象。下面分别简要讲述从派生类到基类的引用转换和对象转换:(1)引用转换如下面的代码:1 do 阅读全文
posted @ 2013-06-29 19:35 Sophia-呵呵小猪 阅读(804) 评论(0) 推荐(0) 编辑
  2013年6月28日
摘要: 如果基类希望派生类对它的某些成员函数进行重定义,那么该基类需要将成员函数声明为virtual函数,即虚函数,而不希望被重定义的函数则为普通的非虚函数。调用虚函数时编译器需要动态绑定以确定究竟要调用的是哪一个类的函数,而触发动态绑定的不仅要求调用的函数是虚函数,还要求必须通过基类类型的引用或指针进行函数调用。(1)派生类对象可以当做基类对象使用因为每个派生类对象都包含基类部分,所以可以将基类类型的引用绑定到派生类对象的基类部分,也可以用指向基类的指针指向派生类对象。例如:double print(const Item_Base&);Item_Base item;print(item);I 阅读全文
posted @ 2013-06-28 17:52 Sophia-呵呵小猪 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程基于三个基本概念:数据抽象、继承和动态绑定。在C++中,数据抽象和动态绑定也被称为类和多态,也就是说C++中的数据抽象通过类实现,而动态绑定主要是为了实现多态。面向对象编程的关键思想是多态性(polymorphism),在C++中,多态性仅用于通过继承而相关联的类型的引用或指针。(1)公有继承、保护继承和私有继承通过继承,派生类可以继承基类定义的成员,同时也可以重新定义那些与派生类型相关的成员函数,将函数特化;派生类也可以定义自己的成员变量和成员函数以实现更多的特性。派生类继承基类的基本形式如下:class derivedClass : access-label baseClass 阅读全文
posted @ 2013-06-28 16:47 Sophia-呵呵小猪 阅读(201) 评论(0) 推荐(0) 编辑
  2013年6月27日
摘要: C++语言提供了专门处理长度可变的字符串的标准库string类型,标准库负责管理与存储字符相关的内存并提供字符串相关操作,头文件为"string"。(1)string类型的定义和初始化string标准库支持以下几个构造函数:构造函数功能string s默认构造函数,s初始化为空串string s2(s1)将s2初始化为s1的一个副本string s3("value")用一个字符串字面值副本初始化s3string s4(n, 'c')将s4初始化为字符'c'的n个副本string s5(cp,n)将s5初始化为cp所指向数组 阅读全文
posted @ 2013-06-27 15:29 Sophia-呵呵小猪 阅读(290) 评论(0) 推荐(0) 编辑
摘要: (1)C风格字符串C风格字符串就是以'\0'结束的字符数组,字符串字面值就是C风格字符串,它以'\0'结尾,类型为const char*。如下面的几个例子:1 char ca1[] = { 'C','+','+'};//没有'\0'结束符,不是C风格字符串2 char ca2[] = { 'C','+','+','\0'};//有'\0'结束符,是C风格字符串3 char ca3[] = "C++"; 阅读全文
posted @ 2013-06-27 14:05 Sophia-呵呵小猪 阅读(461) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 11 下一页