static:
1.声明为static的变量,即使是在函数内部;它也仅仅初始化一次,被存放在全局数据段内;
2.声明为static的全局变量,仅仅在本文件中具有可见性;其他文件不可见,防止命名冲突;
3.声明为static的函数,同2;
类:
3.声明为static的成员函数,是作为类的静态函数,为所有该类的对象所共享,且内部不能够有动态成员变量。
4.声明为static的成员变量,是作为类的静态成员,为所有该类的对象所共享。
const:
1.声明为const的变量是只读的,不可修改的。(不过可以通过指针方式改写)
2.声明为const的成员函数内部是不可以修改类的数据成员的。
const比起#define来说,具有以下好处:
1,const 进行类型检查 2. const支持一些编译器的断点调试
常量指针(const p:修饰指针,指针本身不可变),指针常量(const *p:修饰变量,指针可变,所指的地址不可变):
int a;
int * const p = &a //指针常量,*p可以修改*p = 8;(OK)
p不可以修改 p++(ERROR)
int a,b;
const int *p = &a;//常量指针 *p不可修改 *p = 8;(ERROR)
p 可以修改 p = &b (OK)
重载,覆盖,隐藏
重载:同一个作用域,同名子,不同参数
覆盖:利用多态性质
隐藏:子类不小心取了个与类同样名字的成员函数,本来用户打算调用父类的,因为隐藏了,所以就调用子类的了。
隐藏与覆盖的区别,区别不打,只是覆盖方式子类中就没有父类的方法了;而隐藏则子类中还是有父类的方法,还占据内存空间的。
tcp协议和udp协议的差别 TCP UDP 是否连接 面向连接 面向非连接 (tcp在链接和释放链接的时候是需要资源的,而udp则可以免去这些耗时操作) 传输可靠性 可靠 不可靠 (有序的,稳定的,不出错的、乱序的,不稳定的,) 应用场合 传输大量数据 少量数据 (字节流的,数据块的) 速度 慢 快(需要一些机制保证其稳定,所以慢点;udp则传出去就不管了,无需那些检查和重传机制,所以快点)数据包不包含地址信息的,数据包包含了地址信息。
3次握手:
1.客户发出链接 SYN +序列J
2.服务端回应ASK j+1, SYN k
3.客户端回应ASK k+1
4次销毁:
一个socket的创建链接过程:
客户:
1.socket建立socket套接字
2.调用bind()绑定地址,传入他指定的参数,参数得转成网络字节序列的格式
3.调用connect.
服务:
1.socket()
2.bind()
3.listen()
4.accept()
5.处理一个客户的链接(多线程模式比较好)