![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++学习笔记
大学是材料坑里的,没仔细学过,工作了再来一遍
black_pigeon
想要成为一个FPGA工程师
展开
-
Socket编程基础----TCP C/S模型
打开网络库 在Windows平台使用Visual studio进行网络通信相关开发的时候,首先需要导入头文件和静态库。#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib") 导入头文件后,就可以使用网络库中的函数。首先需要打开网络库,根据指定的版本打开一个网络库。使用到的函数是WSAStartup()。参数&返回值作用wVersionRequired需要的网络库版本lpWSAData返回的原创 2020-10-19 14:01:40 · 418 阅读 · 0 评论 -
C/C++基础----继承(2)
多级继承 多级继承的继承过程,不止一次单继承。多继承 一个类继承自多个类,叫做多继承。 上图所示的继承关系中可以看到,驴和马都继承自动物类,驴和马共同作用派生除了骡子类。但是在这种派生关系中,在骡子类中出现了二义性的问题,对于从动物类继承来的属性x,在????类和驴类中都有相应的属性,但此时,在骡子类中想要访问该属性时,就不知道要访问哪一个x,这是不应该出现的。这是多继承的二义性。下面这段代码,演示了二义性的产生#include<iostream>#include<原创 2020-05-29 17:23:50 · 205 阅读 · 0 评论 -
C/C++基础----模板
函数模板和模板函数 同前面的指针函数和函数指针类似,函数模板和模板函数也具有相似的关系,函数模板是一个模板,模板函数是由函数模板所产生的函数。函数模板需要使用关键字template来声明。#include<iostream>#include<stdio.h>using namespace std;//声明函数模板template<typename T>void add(T x, T y){ cout << x + y << en原创 2020-05-27 13:33:43 · 138 阅读 · 0 评论 -
C/C++基础----多态
静态多态&emap;&emap;在前面学习重载的时候,在调用函数时,编译器会根据指定的参数去调用对应的函数,这是一种静态的多态的表现方式。在面向类中同样也有多态的定义。动态多态 动态多态是在调用的时候自动去匹配和描述物体的信息。实现动态多态的条件有:在类内部的函数存在继承和派生的关系基类类型描述派生类的实例对象 下面这个例子,就是没有起到多态时,从而产生了一些使用上的歧义的现象。#include<stdio.h>#include<iostrea原创 2020-05-26 15:41:31 · 272 阅读 · 0 评论 -
C/C++基础----继承(1)
单继承 子类从父类继承,父类派生出子类,子类具有父类所有的属性和方法。 上图中可以看到,Animal类继承自Base类,Animal 类中拥有Base 类中的方法和属性:#include<stdio.h>#include<iostream>class Base{private: int base_idx;public: void show_info();};void Base::show_info(){ printf("base_idx is %原创 2020-05-25 15:09:35 · 181 阅读 · 0 评论 -
C/C++基础----类(5)
运算符重载 对于类所生成的对象有大量重复的操作,可以将这些函数使用运算符重载来完成,使得运算符能够对类的对象进行作用。#include<iostream>#include<stdio.h>class Rect{public: int width; int height; Rect(int _w, int _h) { width = _w; height = _h; } //通过运算符重载 friend Rect operator + (Rect原创 2020-05-23 14:52:21 · 98 阅读 · 0 评论 -
C/C++基础----类(4)
内联函数 内联函数是一个函数,内联函数的作用是将函数展开,将函数的调用过程转换为直接间函数内部的代码在调用出展开。内联函数的定义和声明需要在同一个文件中,若内联函数的声明和定义在不同的文件中,那么在编译的时候,内联函数找不到其要展开的内容从而报错。 使用inline修饰的方法,不一定能够成为内联的,只是给编译器一个建议,由编译器来判断最终是否内联。友元函数 友元函数的作用是来打破类的封装,在类中声明的友元函数,可以访问内中的所有成员。下面的代码是一个类的声明,从类的声明中可以看到,数据成员都是原创 2020-05-22 11:23:45 · 195 阅读 · 0 评论 -
C/C++基础----类(3)
静态 使用静态修饰的变量能够改变其作用域。在全局区域使用static修饰会使该变量的作用域由全局变为该文件。在函数内部的变量由static修饰会延长其生命周期。在类中声明的静态成员,在创建对象时,静态成员不在对象所处的空间中。静态成员与非静态成员 在类内部,使用static修饰的数据成员和方法成员分别是静态成员和静态方法,没有使用static修饰的成员都是非静态成员和非静态方法。 静态成员和非静态成员的关系如上图所示:当由类创建新对象时,对象所占据的内存空间中有非静态的数据成员,且各个对象之原创 2020-05-19 18:17:00 · 134 阅读 · 0 评论 -
C/C++基础----类(2)
C++动态空间 在C++ 开辟空间,可以使用关键字new,释放空间所用的方法是delete。与C中的malloc类似,在C++中动态开辟的空间依旧是在堆空间上需要手动释放。下面的例子说明了这一过程。#include<stdio.h>#include<iostream>class Rect{private: int pos_x; int pos_y; int width; int height; char *p;public: Rect(int _w,原创 2020-05-19 15:55:57 · 88 阅读 · 0 评论 -
C/C++基础----类(1)
类的定义 类的定义由关键字class指定,类中可以由变量和方法。使用private,public,protect来修饰这些变量和方法。对于私有变量和方法,类不会将其暴露但是,也就是说在外部不能直接访问到类内的私有成员。但是可以通过共有成员来访问私有成员和方法。#include<stdio.h>#include<iostream>class Rect{//私有成员变量private: int pos_x; int pos_y; int width; int h原创 2020-05-18 17:22:32 · 151 阅读 · 0 评论 -
C/C++基础----引用、重载、缺省
引用 引用就像给一个变量取别名。对引用的变量进行操作,实际上操作的就是原来的变量。这在通过函数传递参数时相较于指针提供了便利。#include<iostream>#include<stdio.h>//通过引用改变变量地值void test(int &x){ x = 20;}//通过引用改变指针的值void test_pointer(int * &x){ x = (int *)malloc(sizeof(int)*1);}int main原创 2020-05-17 15:19:49 · 125 阅读 · 0 评论 -
C/C++基础----命名空间
命名空间 命名空间的作用是用来减少全局区域的污染问题。以下面的例子来说:#include<iostream>using namespace std;int x;namespace my_space { int x;};int main(){ printf("x in my_space is %d\n",my_space::x); printf("x in global is %d\n",x); getchar(); return 0;} 上面提到在全局区域原创 2020-05-16 17:10:07 · 99 阅读 · 1 评论 -
C/C++基础----链表
链表的含义 在前面所接触到的数组是一种顺序表,数据只能按照一定的顺序存储在数组中。对动态数组的操作比较麻烦,若想在对数组进行增加,删除进行的操作比较麻烦。 链表是一种数据结构,其包含一个数据和一个指针,两者构成了一个节点,链表就是一个个节点所组成的结构。 链表的示意图如上图所示,链表的指针指向下一个节点,链表最后一个节点中指针成员为空。通过指针的方式将每个节点连接起来是链表的一个特点。对链表进行增、删,相较于顺序表要更加容易。链表追加(append) 下面是在链表末尾增加节点的示意图,需要原创 2020-05-16 15:22:41 · 251 阅读 · 0 评论 -
C/C++基础----指针(5)
二级指针二级指针的含义 二级指针的示意如上图所示:变量int a的内容是255,其地址是0x0000FFFF,int *p是一个指针,指针存的是a的地址,指针的地址是0XFBC00000;int ** pp是一个二级指针,指针存的是一个地址,该地址是一级指针p所在的地址。...原创 2020-05-15 16:02:59 · 242 阅读 · 0 评论 -
C/C++基础----指针(4)
函数指针和指针函数1.1 函数指针 函数指针是一个指针,这个指针指向的是一个函数,在之后调用函数的时候,可以通过指针的方式来调用这个函数。为了使函数指针能够指向一个特定的函数,函数指针的声明需要于函数具有类似的结构。#include <stdio.h>//声明一个函数void test(int x){ printf("%d\n", x);}int main(int argc, char const *argv[]){ //声明一个函数指针 void (*p)(int原创 2020-05-15 14:17:07 · 116 阅读 · 0 评论 -
C/C++基础----指针(3)
动态内存1 动态内存使用方法 在C中使用动态内存,可以使用malloc来动态开辟一段空间。int * p = (int *)malloc(10); 上面所示的例子就是使用malloc开辟动态内存的例子。使用malloc开辟动态内存返回的是一个void类型的指针。可以使用类型转换来使用一个指针来保存这个地址。 动态开辟的内存需要手动释放。使用free(),来对数据进行释放。free(p)2 内存泄漏 动态开辟的内存如果没有及时的释放,将导致内存的泄露。#include<st原创 2020-05-15 11:37:00 · 139 阅读 · 0 评论 -
C/C++基础----指针(2)
二维数组,字符串和指针 今天学习二维数组和指针之间的关系。1.1 二维数组 二维数组是根据一维数组抽象出来的一个结构。定义方法int a[3][3]就可以定义一个二维数组。关于二维数组,可以看作二维数组中保存着多个一维数组。这几个一维数组在地址上是连续的。以这个3x3的数组为例。 二维数组在内存中的分布如上图,可以将一个二维数组看作三个连续的一维数组所构成的。这样就可以可以很方便的来理解二维数组中某个元素所在的地址。下面这段简短的代码可以二维数组中某些元素和地址之间的关系。#include原创 2020-05-15 09:45:19 · 133 阅读 · 0 评论 -
C/C++基础----指针(1)
指针基础 指针<====>地址,指针就是一个地址。指针常用的方法,间接引用#include <stdio.h>//解引用函数void test(int * a){ *a = 100;}int main(){ int a = 10; int *p;//定义一个指针p p = &a;//将a的地址赋值给p test(&a);//调用解引用函数 printf("a is %d \n", a);//输出a的值 printf("p point原创 2020-05-14 19:37:46 · 181 阅读 · 0 评论