在某种程度上,游标可以看作是句柄( handle )。通常情况下游标( iterator )的类型可以有所变化,这样容器也会有几种不同方式的转变:
iterator—— 对于除了 vector 以外的其他任何容器,你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用 “++” 操作符。而不能使用 “–” 或 “+=” 操作符。而对于 vector 这一种容器,你可以使用 “+=” 、 “—” 、 “++” 、 “-=” 中的任何一种操作符和 “” 、 “>=” 、 “==” 、 “!=” 等比较运算符。
——————————————————————————————–
116. C++ 中的 class 和 struct 的区别
从语法上,在 C++ 中(只讨论 C++ 中)。 class 和 struct 做类型定义时只有两点区别:
(一)默认继承权限。如果不明确指定,来自 class 的继承按照 private 继承处理,来自 struct 的继承按照 public 继承处理;
(二)成员的默认访问权限。 class 的成员默认是 private 权限, struct 默认是 public 权限。
除了这两点, class 和 struct 基本就是一个东西。语法上没有任何其它区别。
不能因为学过 C 就总觉得连 C++ 中 struct 和 class 都区别很大,下面列举的说明可能比较无聊,因为 struct 和 class 本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于 struct 和 class 的错误认识:
( 1 )都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
( 2 )都可以有一大堆 public/private/protected 修饰符在里边;
( 3 )虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:
A a = {1, 2, 3}; 不管 A 是个 struct 还是个 class ,前提是这个类 / 结构足够简单,比如所有的成员都是 public 的,所有的成员都是简单类型,没有显式声明的构造函数。
( 4 )都可以进行复杂的继承甚至多重继承,一个 struct 可以继承自一个 class ,反之亦可;一个 struct 可以同时继承 5 个 class 和 5 个 struct ,虽然这样做不太好。
( 5 )如果说 class 的设计需要注意 OO 的原则和风格,那么没任何理由说设计 struct 就不需要注意。
( 6 )再次说明,以上所有说法都是指在 C++ 语言中,至于在 C 里的情况, C 里是根本没有 “class” ,而 C 的 struct 从根本上也只是个包装数据的语法机制。
—————————————————————
最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点: “class” 这个关键字还用于定义模板参数,就像 “typename” 。但关键字 “struct” 不用于定义模板参数。
在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。
template
void f(X x)
{
}
//出错信息:d:codecpptestcpptestcpptest.cpp(33) : error C2065: ‘X’ : undeclared identifier
关于使用大括号初始化
class 和 struct 如果定义了构造函数的话,都不能用大括号进行初始化
如果没有定义构造函数, struct 可以用大括号初始化。
如果没有定义构造函数,且所有成员变量全是 public 的话,可以用大括号初始化。
关于默认访问权限
class 中默认的成员访问权限是 private 的,而 struct 中则是 public 的。
关于继承方式
class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
关于模版
在模版中,类型参数前面可以使用 class 或 typename ,如果使用 struct ,则含义不同, struct 后面跟的是 “non-type template parameter” ,而 class 或 typename 后面跟的是类型参数。
class 中有个默认的 this 指针, struct 没有
不同点:构造函数,析构函数 this 指针
——————————————————————————————–
117. 有关重载函数
返回值类型不同构不成重载
参数参数顺序不同能构成重载
c++ 函数同名不同返回值不算重载!函数重载是忽略返回值类型的。
成员函数被重载的特征有:
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual 关键字可有可无。
5) 成员函数中 有无 const ( 函数后面 ) 也可判断是否重载
——————————————————————————————–
118. 数据库与 T-SQL 语言
关系数据库是表的集合,它是由一个或多个关系模式定义。 SQL 语言中的数据定义功能包括对数据库、基本表、视图、索引的定义。
——————————————————————————————–
119. 关系模型的基本概念
关系数据库以关系模型为基础,它有以下三部分组成:
● 数据结构 —— 模型所操作的对象、类型的集合
● 完整性规则 —— 保证数据有效、正确的约束条件
● 数据操作 —— 对模型对象所允许执行的操作方式
关系( Relation )是一个由行和列组成的二维表格,表中的每一行是一条记录( Record ),每一列是记录的一个字段( Field )。表中的每一条记录必须是互斥的,字段的值必须具有原子性。
——————————————————————————————–
120.SQL 语言概述
SQL (结构化查询语言)是关系数据库语言的一种国际标准,它是一种非过程化的语言。通过编写 SQL ,我们可以实现对关系数据库的全部操作。
● 数据定义语言( DDL ) —— 建立和管理数据库对象
● 数据操纵语言( DML ) —— 用来查询与更新数据
● 数据控制语言( DCL ) —— 控制数据的安全性
起来是一个很简单的问题,每一个使用过 RDBMS 的人都会有一个概念。
事务处理系统的典型特点是具备 ACID 特征。 ACID 指的是 Atomic (原子的)、 Consistent (一致的)、 Isolated (隔离的)以及 Durable (持续的),它们代表着事务处理应该具备的四个特征:
原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分
一致性:在事务处理执行之前和之后,数据是一致的。
隔离性:一个事务处理对另一个事务处理没有影响。
持续性:当事务处理成功执行到结束的时候,其效果在数据库中被永久纪录下来。
——————————————————————————————–
121.C 语言中结构化程序设计的三种基本控制结构
顺序结构
选择结构
循环结构
——————————————————————————————–
122.CVS 是什么
cvs ( Concurrent Version System ) 是一个版本控制系统。使用它,可以记录下你的源文件的历史。
例如,修改软件时可能会不知不觉混进一些 bug ,而且可能过了很久你才会察觉到它们的存在。有了 cvs ,你可以很容易地恢复旧版本,并从中看出到底是哪个修改导致了这个 bug 。有时这是很有用的。
CVS 服务器端对每个文件维护着一个修订号 , 每次对文件的更新,都会使得文件的修订号加 1 。在客户端中也对每个文件维