C总结
定义宏函数和宏函数返回值
定义的宏函数一般函数体会用{}括起来,如果要其返回值的话,需要外面再用()括起来,而且最后一句表达式的值就是这个宏函数的返回值;
fork系列函数
fork 是吧父进程的所有资源拷贝一份给子进程,这里是一个copy;
fork 后父子进程执行没有先后顺序;
为了解决fork后使用exec系列函数执行外部函数重复创建资源,
就有了vfork,
vfork创建子进程,共享父进程的资源,这里是一个share;
vfork配合exec系列函数使用;
vfork一定是先运行子进程,子进程exit或者执行了一个exec,父进程才会运行;
vfork只能用exit而不能用return;
exit和return的区别
exit是直接退出这个进程;
return会弹栈,销毁局部变量,返回上一级函数;
因为vfork的父子进程空间资源共享的,子进程使用return会破坏父进程的运行环境;
exec系列函数
C++总结
参考博客:
C++基础教程(总结)
较C添加的内容/特性
注:1983年夏,“带类的C”被正式命名为“C++”
类,派生类,
公有成员,私有成员
构造函数,析构函数
友元,内联函数(C++里面用来代替宏定义,现在C里面也有内联函数了)
赋值运算符重载
虚函数
函数运算符重载
引用
常量
保护成员,多重继承
赋值和初始化的递归
抽象类
静态成员函数
const 成员函数
模板
异常
类嵌套
命名空间
数据类型
1、基本数据类型
int,short,long,char
float,double,long double
bool(C++添加)
void
2、构造数据类型
指针类型,引用类型(取别名,c++添加)
数组,结构体,联合体,枚举,位域,类(C++添加)
共用体不能被引用;
结构体域在C++里面可以是函数;
结构体变量编译时只为变量域分配空间;
类对象(变量)编译时只为数据成员和虚函数(占4字节)分配空间;
数组和指针
???同C
字符串
string 字符串变量(c++添加)
字符数组
指正指向字符串
函数
内联函数,类似宏定义,直接替换而不跳转,提高运行效率,增加程序大小,现在C++里面用来替换宏定义函数的作用;现在C里面也有内联函数了;
函数重载
处理同一层次上函数名相同问题,返回值可以相同也可以不同,但是参数一定要个数或者顺序,或者类型不同;
函数覆盖
覆盖:覆盖发生在虚表中,看似无实际也无;
父子类都有的函数,父类函数位虚函数,函数名和参数完全相同;多态的关键技术;
函数隐藏
隐藏的定义:隐藏是指派生类的函数屏蔽了与其同名的基类函数;
1、父子类中有相同的函数名函数,父类中不是虚函数,则不管参数名是否相同,父类中函数都被隐藏;
2、父子类中有相同的函数名函数,父类中是嘘函数,则参数名不同,父类中函数被隐藏(参数相同就是覆盖);
那怎么能访问这些被隐藏函数呢???
1、子类需要声明使用这些函数,如下:
using Base::func;
结果就是,这些同名被隐藏函数除了同名同参函数,其他都被视为子类的重载函数;
2、也可以用父类作用词访问隐藏函数;
childobj.Base::func(…);
对象赋值和复制
???
友元
一个类的友元,可以访问该类的私有成员;
友元关系不能传递;
一个类的友元(函数或类),那么这个友元肯定是声明在该类中,即是有区别的放开私有成员访问权限;
友元函数
把普通函数为友元,这个普通函数可以访问该类私有成员;
把成员函数为友元,这个成员函数可以访问该类私有成员;
友元类
把一个类声明为友元类,这类可以访问该类的私有成员;
重载
函数重载
运算符重载
???
继承和派生
???
多继承的二义性,解决方法,虚继承,被继承类为虚基类;
虚函数和多态
输入输出流
标准输入输出流
模板
泛型编程基础;
模板函数
类似下面的定义:
template <typedef T>
T func(T arg) {
// 函数体
}
//或者
template <class T>
T func(T arg) {
// 函数体
}
是一个模板函数;
template <typedef T> // T shi 是模板形参,可以有多个,用逗号隔开
T func(T arg) {
// 函数体
}
//调用
int a = func(10); //这时候模板形参 T 就会被替换成 int;
模板类
类似下面的定义:
template <class T>
class {
T a;
T func(T arg);
}
是一个模板类;
template <class T> // 模板形参可以有多个,用逗号隔开
class {
T a;
T func(T arg);
}
// 使用
class <int> a; //这时候泛型 T 就被替换成了 int;
模板形参
可以是数据类型,非数据类型,模板类型
1、类型形参
template <typedef T>
在声明或定义的时候,T只能被声明为数据类型,而函数或类内部的T直接被替换为该类型(有强转关系的这里先不讨论)
2、非类型形参
template <int a>
这里的a在声明或定义的时候,将会作为一个常量替换内部的a(有点像宏定义,但是有类型),这里的a可以的类型,只能是整形,指针,引用;
标准模板库STL
标准模板库
提供了通用的模板类和模板函数;
可以实现多种流行和常用的算法和数据结构(向量、链表、队列、栈…)