- 博客(11)
- 收藏
- 关注
原创 C++泛型编程(模板)
模版类和模版函数的声明和定义,全都要放在同一个文件中,而不能分离到头文件和CPP文件中,否则在链接的时候可能就会提示找不到外部符号。原因是:编译本身这个cpp的时候,没有发现有引用的地方,那么就不会被编译,而编译引用这个模板函数的其他cpp的时候,要直接调用这个函数,就会发现这个函数没有编译,没有实现,所以报错,找不到该函数。
2023-10-13 13:42:11 36
原创 C++继承和多态
三种继承方式:public,protected,private。若不写,默认是private。继承方式决定了父类成员在子类中的访问权限的上限。高于上限的会自动降级,低于上限的则保持不变父类的private成员是能够被继承的,并且(成员变量)会占用子类对象的内存,它只是在子类中不可见,导致无法使用。子类覆盖父类的成员函数,名字相同就会覆盖,即父类的重载函数也会一起覆盖。只要函数名相同,就算参数不同,也会覆盖。
2023-10-11 09:51:38 34 1
原创 C++——类
最后在构造函数中初始化,此时先调用的成员变量的默认构造函数构造了类成员,然后再调用赋值运算符对之前默认构造的类成员进行赋值,这实际上进行了两步操作。对象在调用函数时隐式传递了当前对象的内存地址过去,函数那边也有一个隐式的对象指针名this,但不能在形参和实参显式传递this指针,可以在函数里使用this指针。静态成员函数没有默认的this指针,因此无法访问普通成员函数和变量,同样也无法访问对象自身的普通成员变量和函数,只能访问静态成员变量和静态成员函数。成员函数不保存在对象的内存中,不存在赋值问题。
2023-10-11 09:30:17 40 1
原创 C++函数指针
函数被编译成机器码后都是一段二进制数据,被加载到内存后都有一个起始地址,指向函数起始地址的指针称为函数指针。而函数指针内可以存放具有相同函数原型的函数起始地址。即可以改变指向,但函数原型要相同。//返回值类型为整型指针的函数。函数指针指向的内存中存的是代码,数据类型指针指向内存中的是数据。定义形式为:数据类型 (*指针变量名) (参数列表)回调函数就是通过函数指针调用函数,其他函数中调用。
2023-10-11 09:19:02 43 1
原创 C++结构体和联合体
因为浅拷贝问题,可以将一个结构体变量直接赋值给另外一个同类结构体变量,若成员变量是指针,此时被赋值的指针成员变量是直接指向那块内存空间。性能原因:CPU每次读写内存都是要消费时间的,并且CPU访问内存时,并不是逐个字节访问而是以字长(wordsize,数据总线的宽度:16,32,64)为单位访问,内存对齐后可以提升性能。平台原因:有的CPU可以访问任意地址上的任意数据,而有的CPU只能在特定地址访问数据,如果将分配的内存进行对齐,可以提高代码的平台可以移植性。
2023-10-09 11:10:26 99 1
原创 C++枚举
可以给部分或全部枚举成员指定任意的整数值,在指定值之前的成员按默认方式赋值,指定值之后的成员,则依次加1。多个成员的值可以相同。里面的常量,有些类似于宏定义常量,不过宏定义编译器不会检查,枚举常量会进行检查,更加安全。常量列表,由枚举成员组成,表示枚举类型的取值范围,在取值时编译器会检查是否在取值范围内。编译器会默认给每个枚举成员指定一个整数值,从0开始,即是int整数型。枚举一个常量占1个字节。枚举一个常量占4个字节。
2023-10-09 11:08:50 55 1
原创 C++数组
数组作为函数参数传递后就指针化了,void fun(int arr[])等价于void fun(int *arr),因此这时想利用sizeof(arr)时,返回的是int指针的内存字节数(T:准确的说法是,地址总线的宽度),还想知道数组的长度的话,就需要做void fun(int *p,int len)这个函数了。(T:可以将指针传给数组形参,反过来也可以,用数组作为形参是告诉程序员,应该传地址连续的指针,即使函数的形参数组,这个形参也是可以移动的,只是写法不同而已)strlen(a):求数组元素的个数。
2023-09-26 10:45:39 43 1
原创 C++指针和引用
为了在 C++ 代码中使用 C 语言编写的函数或变量,需要使用 extern "C" 修饰符来告诉编译器按照 C 语言的方式处理这些代码,即取消名称装饰。 使用 extern "C" 后,里面的代码会按照 C 语言的方式进行编译和链接,从而可以在 C++ 程序中调用这些 C 语言函数或变量。捕获的a变量只是外界a变量的拷贝,里面a变量的值如何变化都不会影响外界a变量的值,就是拷贝的含义。在捕捉列表中使用引用,捕捉的是变量的内存地址,此时在函数体内改变值外界的值也会随之改变。内联函数必须写在头文件中。
2023-09-25 10:30:15 39 1
原创 C++函数
为了在 C++ 代码中使用 C 语言编写的函数或变量,需要使用 extern "C" 修饰符来告诉编译器按照 C 语言的方式处理这些代码,即取消名称装饰。 使用 extern "C" 后,里面的代码会按照 C 语言的方式进行编译和链接,从而可以在 C++ 程序中调用这些 C 语言函数或变量。捕获的a变量只是外界a变量的拷贝,里面a变量的值如何变化都不会影响外界a变量的值,就是拷贝的含义。在捕捉列表中使用引用,捕捉的是变量的内存地址,此时在函数体内改变值外界的值也会随之改变。内联函数必须写在头文件中。
2023-09-06 17:16:59 59 1
原创 变量和数据类型
变量是内存空间的别名,每个变量都对应有一个内存地址(即在内存中的开始地址)。变量的类型只是表示此变量的占得内存空间的长度,和存放的具体数据无关。在编译时变量就会被编译器(或解释器)转变为对应的内存地址。局部变量:在程序实际用到时才分配内存空间,只能在它所在的作用域内访问。static的局部变量:如全局变量编译时就确定地址,程序启动就存在,直到程序结束才失效。但它的作用域在定义的局部,并不在全局。全局变量:程序的任何函数都可以访问,程序启动就存在,直到程序结束才失效。在程序编译时就分配了内存空间。
2023-08-31 14:22:21 43 1
原创 C++编译过程
头文件(.h)可以被头文件或C文件包含。包括:合并包含文件,进行宏展开,条件编译的检测等,这一步处理完了,还是C++代码)程序主要由:注释写给人看,单行注释://,多行注释:/* */)、预处理指令(写给编译器看的,以#开头)、程序主体(一个程序只可以有一个main函数)。编译(g++ -S <c文件>):对预处理后的代码进行语法和语义分析,最终得到汇编代码或接近汇编的其他中间代码,结果保存为.s文件。:#define 宏名称(形参,形参,...) 字符串 ,应用宏的格式为:宏名称(实参,实参,...)
2023-08-30 16:25:28 42
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人