自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 成员变量和成员函数分开存储

​ 只有普通成员变量属于对象, 会占用对象的内存(并且 类中一旦声明了普通成员变量,那么类对象的大小, 就是普通成员变量的大小)​ 静态成员变量, 成员函数, 静态成员函数 都不属于类对象(他们在内存中只保留一份), 所以他们都不占用对象的内存。​ 综上所述: 成员变量和成员函数是分开存储的。​ 空对象, 在内存中只占用1个字节。

2024-08-24 14:24:11 15

原创 C++类对象作为类成员

那么在构造的时候, 是先进行本类的拷贝构造, 还是先进行成员中类对象的拷贝构造?构造:(先有局部再有整体,局部组成整体)**C++ 类对象作为类成员**当一个类中有类对象作为类的成员。先进行类成员的构造函数。再进行类成员的析构函数。再进行本类的构造函数。先进行本类的析构函数。

2024-08-24 14:23:39 54

原创 C++静态成员和静态变量

当静态成员函数访问普通成员变量时, 编译器就无法知道, 到底是访问哪个对象的普通成员变量, 从而导致出错。所以只要调用静态成员函数访问静态成员变量, 编译器就知道, 是访问的是内存中唯一的静态成员变量。​ 和静态成员变量一样,静态成员函数也是有访问权限的, 类外无法访问私有的静态成员函数。​ 因为静态成员变量是属于类的, 是所有该类的对象所共享的, 在内存中只有一份。​ 3.静态成员函数可以在类内声明+初始化, 也可以在类内声明, 类外初始化。**静态成员函数注意点1:**

2024-08-24 14:23:04 20

原创 C++ 深浅拷贝

所以就必须使用深拷贝, 新的对象, 在堆区重新开辟一块空间, 将原来对象中堆区的值,拷贝到这块新空间中, 这样两个对象 的两个指针就指向两块不同的堆区, 相互对立, 互不干扰, 在调用析构函数的时候,各自释放自己的堆区, 这样就不会导致出错。在调用析构函数释放堆区内存时, 两个对象都会调用析构函数, 那么析构函数就会被调用两次, 这块堆区内存也就会被释放两次, 从而导致出错。总结: 如果属性有堆区开辟的, 一定要提供自己的构造函数, 防止浅拷贝带来的问题。**C++ 深拷贝与浅拷贝**

2024-08-24 14:21:47 47

原创 C++对象特性

/ error 重定义错误, 编译器会认为 Base(b4) 等价于 Base b4, 而b4已经被定义了。// 匿名对象 特点, 当前行执行结束后, 系统会理解回收掉匿名对象, 因为后续没法调用这个对象(没有名字怎么调用)// 有参构造 等价与 Base b6=Base("hh",22);Base b3();cout<<"默认拷贝构造"<<endl;cout<<"有参构造"<<endl;cout<<"拷贝构造"<<endl;

2024-08-23 23:18:30 70

原创 程序内存分区模型

cout<<"字符串字面量常量hello的地址:"<<(intptr_t)&"hello"<<endl;cout<<"全局字符串常量e2的地址:"<<(intptr_t)&e2<<endl;cout<<"局部字符串常量e的地址:"<<(intptr_t)&e<<endl;cout<<"全局变量b的地址:"<<(intptr_t)&b<<endl;cout<<"局部常量f的地址:"<<(intptr_t)&f<<endl;cout<<"全局常量g的地址:"<<(intptr_t)&g<<endl;

2024-08-23 21:51:13 157

原创 C++函数模板

/ 编译器优先调用模板,因为调用普通函数, 编译器还要进行隐式类型转换, 还不如直接调用模板进行自动类型推导来的快, 所以编译器走捷径, 就直接调用函数模板。template<typename T> // 声明一个模板, 告诉编译器看到后面的代码中含有T时, 不要报错, T是一个通用的数据类型。// 这里必须要确定模板的数据类型(即便没有使用模板, 也要告诉编译器数据类型)// 1.函数模板调用时, 如果利用自动类型推导, 不会发生隐式类型转换。// 如果普通函数可用, 优先调用普通函数。

2024-08-22 22:39:59 303

原创 TCP/IP模型与OSI模型对比

​ 就对应于OSI模型中的, 物理层, 数据链路层,负责物理地址的管理和数据帧的传输。​ 主要管理物理(MAC)地址和负责数据帧的传输入, 主要协议有ARP协议。​ 主要提供网络服务和应用接口, FTP, HTTP等协议。​ 主要负责路径选择和管理IP地址, 主要协议有IP协议。​ 负责端到端的传输, 主要协议有TCP/UDP协议。

2024-08-21 09:14:39 246

原创 C/C++中线程的使用

上下文切换: 当一个任务在cpu时间片使用完后,还没有执行完毕, 就会保存此时执行的状态, 等到下次再获得cpu时, 就从保存的状态继续向后执行, 任务从保存到再次加载的过程就是一次上下文切换。retval: 当线程退出时,可以传入的数据, 主线程调用pthread_join()回收子线程的时候, 就可以接收到子线程传入的retval数据,如果不需要传入数据, 就直接设为NULL。// 返回当前调用该函数的线程ID。也就是说, 如果主线程先执行完毕, 退出的时候, 子线程也跟着被销毁, 无法继续执行。

2024-08-20 23:57:33 758

原创 IO多路复用epoll

因为边沿模式下, 在新数据到来时,只会通知一次, 所有 这就要求, 用户保证要在得到通知后,要把缓冲区的数据全部读完, 这就需要循环进行read操作, 但是,当最后读完缓冲区的数据后, 没有数据可读时, read就会默认陷入阻塞, 这就使得服务器的整个执行流程无法继续进行下去, 所以必须将文件描述符设置为非阻塞, 这样当循环读数据, 将数据读完后, 就会检测到缓冲区数据已读完, 就不会陷入阻塞。写事件: 当写缓冲区可写, 写事件只会触发一次 当缓冲区被写满后, 再次变为可写, 写事件才会再次被触发。

2024-08-20 22:32:50 889

原创 IO多路复用select

首先, 将要检测的fd_set(读集合,也可以理解为一张文件描述符的表)拷贝到内核中, 由内核来遍历fd_set中的每一位, 如果fd_set中对应文件描述符的标志位为0, 则说明该处的文件描述符不需要检测, 内核就会跳过这个文件描述符, 如果fd_set中的文件描述符的标志位为1, 则说明该处的文件描述符需要进行检测, 内核就会检测这个文件描述符的读缓冲区, 如果读缓冲区有数据, 则该处的状态不变,标志位还为1, 如果读缓冲区没有数据, 那么该处的标志位就会被内核置为0。

2024-08-20 20:28:40 734

更新-复试面试资料汇总.pdf

更新-复试面试资料汇总.pdf

2022-03-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除