C++初步总结

https://github.com/huihut/interview#-cc

基础类型

1.枚举,替换define。 默认从零开始逐渐为枚举元素+1初始化

类和对象

  1. this
    类的成员函数体是被所有对象共有; 函数体内访问成员变量通过this->访问
  2. 成员函数
    static,const成员函数==>只能读取成员变量
  3. 成员变量的初始化顺序
    类中成员变量的声明顺序 = 实际初始化的顺序
  4. 复制构造函数 ==> 注意: 构造函数都是没有返回值的(直接对于私有变零操作, e.g.开辟空间)
    Point(const Point& tmp)
    Point p1 = p2;
  5. explicit
  6. 赋值运算符
    Point& operator= (const Point& tmp) ==> 需要返回值的; return *this
    p3 = p2;
  7. new Point[] delete [] (void*)p
  8. std::set_new_handler(my_func); 自定义new失败的处理函数
  9. iostream sstream
  10. 类内声明 友元函数(访问private成员变量)

模板库

  1. copy on write
    复制时不开辟空间,只有修改时才开辟空间(引用计数 = 当前变量被引用的次数)
  2. template<传入参数>
  3. Standard Template Library
  1. container
  2. iterator
  3. Adapter
  4. 函数适配器 bind
  1. allocator static的对象
  2. std::move 右值赋值给左值,左值对象不需要新开辟空间。 区别:赋值构造函数=1.释放原有空间 2.开辟新空间 3.深拷贝
  3. virtual table
  4. virtual baseClass 虚基类, 继承二义性问题
  5. virtual func() = 0; ==> 抽象类 ==> 不能创建对象
  6. virtual ~析构()
  7. overload; override; oversee;

类型转换

  1. dynamic_cast ==> 仅在子类指针向上转型到基类指针时合法
  2. const_cast(expr) ==> 删除expr表达式的const属性
  3. static_cast(expr) ==> 仅在expr类型可以和T类型做隐式转换时合法 ==> 类似于dynamic_cast??

智能指针

  1. shared_ptr obj_p(new T(…)) shared_ptr是类,对象obj_p当做指针使用
  2. weak_ptr obj_p§; p是shared_ptr; weak_ptr设计目的:https://zh.cppreference.com/w/cpp/memory/weak_ptr

系统编程

  1. 预处理(e.g.宏展开)->编译->汇编->链接(e.g.动态链接库)
  2. #define add(x, y) (x + y)
  3. gdb ./a.out a.out.core ulimit -c unlimited

文件操作

  1. lseek
  2. struct stat
  3. FD_ZERO,FD_SET,FD_ISSET
  4. select(max_fd+1, 读操作集合,写操作集合,NULL,timeout时间) return 就绪的描述字个数
  5. mmap <==> 避免用户态和内核态频繁的拷贝数据 return 指针指向映射后的空间

进程&管道

  1. 进程状态的转移图 run->ready or wait
  2. fork(父子进程执行次序不确定性)==> return 父进程得到子进程的pid;子进程得到0 vfork(子进程先执行)
  3. waitpid
  4. fork+setsid 彻底独立=Daemon
  5. mkfifo 管道通信 int mkfifo(const char *pathname, mode_t mode);
  6. 共享内存: shmget创建共享内存,返回标识号int;shemat获取标识号的内存,返回内存的头指针; shmdt,shdctl

线程

  1. pthread_create(pid,func,func的参数) pthread_join(id,pid return val)
  2. pthread_mutex_t lock;
    pthread_mutex_init(&lock, mode属性);
  3. pthread_cond_t cond;
    pthread_cond_init(&t.cond,NULL);pthread_cond_signal(&t.cond); pthread_cond_wait(&d->cond,&d->mutex);==>阻塞等待signal
  1. 协程?资源占据更少,就是小的处理单元,线程也可以调度协程(直观理解: 进程里启很多协程做运算,进程继续执行。 通过共享内存,channel做通信)
  2. 线程?CPU最小调度单元,(同一进程内可以互相通信,全双工半双工)
  3. CPU调度: 抢占式轮转调度 非抢占:先来后到Queue,优先级排序 其它:多级反馈队列,不同队列的调度策略不同。动态调整其进程所在队列
  4. Epoll: epoll create; epoll ctl; epoll_wait(返回监听的事件数目)
  5. C++: 防止内存的泄露的方法?
  6. 进程线程通信机制
  7. C++和C在编译器的不同
  8. 计算机网络: 应用层(http,SMTP,FTP) ==> 传输层(TCP.UDP)socket? ==> 网络层(IP,ARP数据的打包) ==> 数据链路层
  9. 用户态 -------系统调用------> 内核态

################################################################# C++ 11

  1. lambda表达式
    外部参数捕获{计算 + 返回}
    e.g. [my_ize](const string& i, const string& j){ return (i+j).size()>my_size?1:0; }
    e.g. std::sort(vector.begin(),vector.end(), [](const T& i, const T& j){return i > j;}
  2. exception stack = 异常的捕获,不断向上返回异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值