递归生成某集合的所有序列: 递归生成某集合的所有子集: 设集合X (A1, A2, A3,…, An)的所有子集为S[X(n)],从集合X中移走A1的子集X(n-1)的所有子集集合记为S[X(n-1)] S[X(n)] = S[X(n-1)] ∪ {S[X(n-1)]每个子集加上A1} 例如 集合{A, B, C} {A}: {} {A} {A B}: {} {A} ∪ {B}

Read More

1. 你的类需要构造函数吗?其访问控制级别怎样? 2. 数据成员需要设计成私有的吗? 3. 需要无参的构造函数吗? 4. 需要析构函数吗?需要设计成虚析构函数吗? 5. 需要复制构造函数吗 如果在构造函数中分配资源,则需要复制构造函数 6. 需要赋值操作符吗? 检查自我赋值 释放旧值, 复制新值 7. 需要定义关系运算符吗? 8. 参数类型需要加上 const 吗? 9. 成员函数需要时 const

Read More

指针和引用都是用来间接访问对象的,他们之间有什么区别呢?何时用指针?何时用引用?为什么? 1. 首先认识到指针可以初始化为NULL而引用则不可以。 一个引用变量必须引用到某个对象上, 而且一旦初始化一个引用后,这个引用只能访问这个对象,而不能重新给该引用赋值到其他对象,即关系一旦建立,就不能解除。 因此当你需要一个变量可以间接访问其他对象时, 你需要使用指针。 因为一个引用必须关联到某个对象, 因为在定义引用时必须初始化:string &rs; // 错误: 引用变量必须初始化string s(“xyzzy”);string &rs = s; // okay, rs引用s 指针没有这个限制:string *ps; // 未初始化的指向string的指针 2.

Read More

A 声明从它的名字开始读取,然后按照优先级顺序依次读取B 优先级从高到底依次是 声明中被括号括起来的那一部分 后缀操作符: 括号()表示这是一个函数,而方括号[]表示这是一个数组 前缀操作符: 星号 * 表示“指向...的指针” C 如果const和(或) volatile关键字后面紧跟类型说明符(如int,long等), 那么它作用于类型说明符,在其他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。 例如, 声明 char * const *(*next)();A     首先变量名为“next”, 并注意到它直接被括号括住B.1  把括号里作为一个整体,得出“next是指向…的指针”B     考虑括号外面的东西, 在星号*前缀和()后缀间作选择,根据优先级规则,()优先级较高,所以next是一个函数指针,指向一个返回…的函数B.3  处理前缀“*”, 得出指针所指的内容C     最后把char * const解释为指向字符的常量指针

Read More