1.面向对象的三个特点:封装(private、protected)、继承(interface)和多态(virtual)。
多态性是允许你将父对象设置成为和它的一个或者更多的子对象相等技术,赋值之后父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。即,允许将子类类型的指针赋值给父类类型的指针,在C++中通过虚函数实现的。
2.C++中的空类默认产生的四种数据类型:默认构造函数、析构函数、拷贝构造函数、赋值函数。
3.重载和覆盖的区别
覆盖(override),是指派生类重写基类的虚函数,重写的函数必须有一致的参数表和返回值;
父类指针动态地调用属于子类的该函数,对于函数的调用,在编译期间是无法确定的(调用的子类的虚函数的地址无法给出),且它们的地址是在运行期绑定的(晚绑定)。
重载(overload),是指编写一个与已有函数同名但是参数表(参数个数、参数类型或两者都可以不同)不同的函数。如,一个函数既可以接受整型作为参数,也可以接收浮点数作为参数,它不属于面向对象的编程,而只是一种语法规则。
对于函数的调用,在编译期就确定了,是静态的(它们的地址在编译期间就已经确定了(早绑定))
4.当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。
5.快速排序(quick sort)的基本思想是任取排序元素中的某个元素(如第一个元素)作为基准,按照该元素的关键字大小,将整个序列划分为左序列和右序列,左侧子序列中所有元素的关键字小于基准元素的关键字,右侧子序列中所有元素的关键字大于基准元素的关键字,基准元素则排在这两个子序列中间(这应该也是该元素最终安放的位置)。然后分别对这两个子序列重复施行上述算法,直到所有的元素都排在相应位置为止。
整个快速排序的过程可递归。
typedef int elem_t;
int partition(elem_t a[],const int start, const int end){
int i = start;
int j = end;
const elem_t pivot = a[i];
while(i<j){
while(i < j && a[j] >= pivot) j--;
a[i] = a[j];
while(i < j && a[i] <= pivot) i++;
a[j] = a[i];
}
a[i] = pivot;
return i;
}
void quicksort(elem_t a[], const int start, const int end){
if(start < end-1){
const int pivot_pos = partition(a, start, end);
quicksort(a, start, pivot_pos);
quicksort(a, pivot_pos+1, end);
}
}