面向对象

基类成员 public 派生 private 派生 protected 派生
private 不可访问 不可访问 不可访问
public public private protected
protected protected private protected

虚函数, 纯虚函数, 抽象类

虚函数 虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。当一个成员函数声明为虚函数后,其派生类中的同名函数自动成为虚函数。

virtual float area();

纯虚函数 纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该函数在派生类中仍然为虚函数。

virtual float area() = 0;

虚函数和纯虚函数

纯虚函数和抽象类

不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。由于纯虚函数不能被调用,抽象类是不能被实例化的。

指针

void(*signal(int sig,void(*func)(int)))(int);

signal 所在的括号开始提取:void(*signal( ) )(int); 首先 signal 后缀跟的是括号,我们得到 signal 是一个函数, 然后得到前缀为 * 表示此函数返回的是一个“……指针”…………最后得到 signal 是一个函数,返回函数指针,函数所指向的指针接受一个 int 类型的参数并且返回 void

然后我们看 signal 函数参数本身:void(*func)(int) 表示 func 是一个函数指针,此指针指向的函数接收一个 int 参数,返回值是 void

其他

函数实现

strcpy:字符串拷贝

char *strcpy(char *destStr, char *srcStr){
    assert( destStr != NULL ); // 为空就终止执行
    assert( srcStr != NULL );
    char *dest = destStr;
    while ( *srcStr != '\0' ){
        *destStr++ = *srcStr++; // 先赋值, 地址再自增1
    }
    return dest;
}

strcmp:比较字符串

int strcmp(const char *str1, const char *str2){  
    while(str1!=NULL && str2!=NULL){  
        while(*str1++ == *str2++){
            // str1==str2
            if(*str1=='\0' && *str2=='\0') return 0;
            // str1<str2
            if( *str1=='\0' ) return -1;
            // str1>str2
            if( *str2=='\0' ) return 1;
        }
    }
    return -2; // 有指针为空的情况  
}

reference: strcpy函数的实现, cnblogsAllenNewOk, strcmp函数的两种实现, iteye

排序

冒泡

void bubble_sort(int[] a, int n){
    int temp, i, j;
    for (i = 0; i < n; i++)
        for (j = i; j < n; j++)
            if (a[i] > a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
}

参考