c++
_Saoke
曾以为走不出去的日子
现在都回不去了
展开
-
C/C++中对NULL的理解与总结
NULL起初我们知道, NULL其实就是代表空指针的宏, 其本质上就是 0, 表示不指向任何内存的空指针但是, 我们看这段代码: int* p = (void*)NULL; ...原创 2019-02-21 20:18:57 · 4790 阅读 · 0 评论 -
C++模板的认识
什么是模板模板是泛型编程的基础, 是代码复用的模具.模板的实现原理编译器根据传入的实参类型推演生成对应类型的函数和类, 也就是说在传入实参类型之前, 模板是未实例化的, 模板只有实例化之后才会是真正的函数或类, 这也是模板不能很好的支持分离编译的原因.模板函数模板:#include <iostream> ...原创 2019-07-06 19:58:01 · 271 阅读 · 0 评论 -
C++继承
继承什么是继承:继承可以认为是类层面上的重载. 在保证原有类型的基础上进行扩展, 实现类的代码复用. 继承展现了面向对象程序设计的层次结构.基类和派生类对象之间的赋值:派生类可以赋值给基类的对象/指针/引用(切片), 但是基类不能赋值给派生类.隐藏(重定义):基类和派生类有独立的作用域如果子类中有和父类同名的函数, 子类成员将屏蔽父类的同名成员的直接访问形成对父类同名成员的隐藏(重定...原创 2019-07-06 19:58:58 · 159 阅读 · 0 评论 -
C++异常
C语言异常处理C语言中最常用的处理简单错误的方式就是通过 assert , 错误码 以及 perror等库函数来进行错误的获取和处理. 但是这存在一些缺陷, 比如说 assert 直接终止程序太粗暴, 错误码在返回值为整型家族的函数中会难以判断.setjmp.h在C语言的函数库中存在 setjmp 和 longjmp 的组合, 来实现简单的异常捕获和处理. 这在较大型的C语言项目中可能会用到...原创 2019-07-06 19:59:49 · 230 阅读 · 0 评论 -
C++智能指针
智能指针智能指针主要是为了解决内存泄漏的问题, 这与异常安全是密不可分的, 如果在malloc和free之间或new和delete之间存在抛出异常的话, 还是会存在内存泄漏的问题.智能指针的原理RAII(Resource Acquisition Is Initialization): 资源获取即初始化这是一种利用对象声明周期来控制程序资源的技术.在对象构造时获取资源, 在这个对象的整个声...原创 2019-07-06 20:00:12 · 244 阅读 · 0 评论 -
C++的类型转换
C语言中的类型转换#include <stdio.h>#include <Windows.h>int main() { int i = 1; // 隐式类型转换 double d = i; printf("%d\t%.2f\n", i, d); int* p = &i; // 强制类型转换 int address = (int)p; prin...原创 2019-07-29 20:44:07 · 248 阅读 · 0 评论 -
关联式容器--树形结构(map&set)
关联式容器什么是关联式容器:关联式容器也是用来存储数据的,与序列式容器(vector, list, deque…)不同的是,其里面存储的是<key, value>结构的键值对,在 数据检索时比序列式容器效率更高键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息, 这类似于字典中的一一对...原创 2019-07-29 20:37:53 · 816 阅读 · 0 评论 -
TCP模拟实现服务端与客户端的简单交互---c++
TCP网络通信流程:1.创建套接字(socket)2.为套接字绑定地址信息(bind)3.服务端开始监听(listen)4.客户端请求连接(connect)5.服务端获取连接请求(accept)6.发送数据(send)7.接收数据(recv)8.关闭套接字(close)头文件:#include <iostream> ...原创 2019-06-01 10:06:21 · 1110 阅读 · 0 评论 -
C++中string类的原型
#include<iostream>#include<cstring>using namespace std;class String{private: char *pstr;public: String(const char *str = " ") { pstr = new char[strlen(str) + 1]; ...转载 2019-02-22 20:15:07 · 2185 阅读 · 0 评论 -
c++类的默认成员函数
6个默认成员函数这些默认的类成员函数, 在类创建的时候, 编译器会自动调用, 但是自动调用并不意味着他们能完成用户所期待的所有任务, 像构造函数, 析构函数, 拷贝构造函数, 赋值重载会在某些情况下需要用户根据程序的需要自定义实现.构造函数构造函数的主要工作是在对象创建的时候就完成初始化工作.特性函数名与类名相同。无返回值。对象实例化时编译器自动调用对应的构造函数。构造函数可以...原创 2019-05-14 21:23:08 · 4908 阅读 · 5 评论 -
c++的初识
命名空间:命名空间简单来讲, 就是解决命名冲突问题, 它可以作为附加信息来区分不同库中相同名称的类, 函数, 变量等. 本质上, 命名空间其实就是定义了一个范围.命名空间的使用方式:1.全部展开:using namespace std;最方便,但是容易出现与库函数产生命名冲突的危险2.不展开:std::cout << "Hello word" << std:...原创 2019-05-10 23:40:13 · 166 阅读 · 0 评论 -
c++内联函数
内联函数:内联函数简单来说就是实现在编译时将函数的代码副本放在每个调用函数的地方.内联函数存在的意义就是解决函数调用的效率问题. 避免了函数栈的开销, 以空间换时间. 但是也会存在代码膨胀的问题, 因此编译器会根据函数代码的长度来决定是否内联, 在类中定义的函数多于 1 行, 则忽略 inline 关键字; 同时在外部定义的内联函数超过 10 行左右也会被忽略 inline. 这种校正规则一定...原创 2019-05-11 11:32:26 · 574 阅读 · 0 评论 -
c++中auto
auto在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。语法糖:简单的识别变量类型这个还不能体现出 auto 的真正意义. 但是当类型名过长时, auto 的作用就发挥出来...原创 2019-05-11 12:00:51 · 27452 阅读 · 1 评论 -
c++类和对象基础完结篇
再谈构造函数之前对构造函数简单的定义就是实现成员变量的初始化功能, 起始这并不准确:在引入初始化列表之前, 我们只是对成员变量进行了声明和赋值而已, 并没有进行真正的初始化. 因为初始化只能进行一次, 而赋值可以进行多次.初始化列表:初始化列表做的事就是, 实现真正的成员变量的初始化:初始化列表存在的意义:初始化列表存在的意义就是有些地方必须要用初始化列表来解决.引用成员变量: 引用...原创 2019-05-26 23:15:06 · 193 阅读 · 0 评论 -
UDP模拟实现服务器与客户机的简单交互---c++
五步1.创建套接字 — socket2.为套接字绑定地址信息 — bind3.接收数据 — recvfrom4.发送数据 — sendto5.关闭套接字 — close头文件:#pragma once ...原创 2019-05-22 10:50:15 · 725 阅读 · 0 评论 -
c++类和对象的初识
面向对象面向对象是程序设计的思想, 或者说是软件开发的方法.在面向对象语言中, 引入了类和对象的概念. 所谓类就是对同种个体的抽象集合, 而对象就是类中的一个实体; 所以类和对象有着 “类是对象的抽象, 对象是类的实例” 的关系. 这其实是将现实世界中的关系和特性引入到了计算机世界中, 这让我们在程序设计时有了更合理的分析和管理思想, 将程序中的一些具有同种属性和行为的实体集合抽象成一个类, ...原创 2019-05-13 12:25:28 · 294 阅读 · 0 评论