- 博客(51)
- 收藏
- 关注
原创 C++:继承
①继承的基本语法:class +子类名:+继承方式+父类名class son :public base②继承方式: 1.public 2.protected 3.private#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class base{public: int m_a;protected: int m_b;private: i...
2020-08-25 07:34:55
185
原创 C++:前置++和后置++运算符重载
前置++(先自加,再参与运算): //前置++运算符重载 person& operator ++() { this->m_a++; return *this; }后置++(先参与运算,再自加): //后置++运算符重载,注意需要加int来与前置++重载做区分,语法这样规定。 person operator ++(int) //为什么返回值不用引用,因为不可以返回局部变量 { person temp = *this; ...
2020-08-24 09:49:12
7110
3
原创 C++:+,<<运算符重载
重载运算符:与重载函数相似,但是需要加上operator关键字。//全局函数 重载+运算符person operator +(person a, person b){ person temp(0,0); temp.m_a = a.m_a + b.m_a; temp.m_b = a.m_b + b.m_b; return temp;}全部代码实现如下:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using n.
2020-08-23 21:25:08
218
原创 C++:友元friend
1.全局函数做友元函数:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class person{ //加上friend关键字,printage函数变为友元函数,可以访问私有变量 friend void printage(person *p);public: person(int age);private: int age;};//person的构造函数person::p
2020-08-23 20:48:28
182
原创 C++:常函数和常对象
常函数:在成员函数后加const常对象:在类型前面加constmutable关键字:可以使成员变量被成员函数改变#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class person{public: //常函数 //1.在函数声明后面加const关键字 //2.作用:防止this指向的变量被修改 //3.如果有得变量必须要修改,可以在变量前面加上mutable关键字.
2020-08-23 16:58:21
263
原创 C++:空指针调用成员函数
空指针访问成员函数 1.如果 成员函数中没有用到this 则可以直接使用 2.如果成员函数中使用了this,则会出错,所以我们要在成员函数中添加空指针判断#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//如果用空指针访问成员函数 //1.如果 成员函数中没有用到this 则可以直接使用//2.如果成员函数中使用了this,则会出错,所以我们要在成员函数中添加空指针判断cl...
2020-08-23 16:42:06
506
原创 C++:类对象分析
在C++中:1.空类对象 为1个字节,用来区分不同的对象2.成员函数和静态成员变量不占用类的大小,成员变量占用类的大小3.类遵循内存对齐。
2020-08-23 15:58:40
171
原创 C++:this指针
this指针本质:指向被调用函数所属的对象#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//this指针 指向 被调成员函数的所属对象class person{public: person(int age) { this->age = age; } //链式编程 person& personaddperson(person p) { this-&g
2020-08-23 15:45:51
125
原创 C++:单例模式
单例模式:一个类只有一个实例化对象。 第一步:构造函数,拷贝构造函数私有,再添加一个静态实例化指针也是私有 第二部类外静态对象指针实例化 第三步:创建一个能够获取实例化指针的接口 第四步,通过接口获取唯一的实例化对象 #define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class father{public: //第三步:创建一个能够获取实例化指针的接口 static..
2020-08-23 10:38:14
95
原创 C++:静态成员
静态成员变量: 所有对象都共享同一个变量 编译时就分配内存 有2种访问方式:通过对象访问,通过类名+::访问 静态成员变量也有访问权限 类内声明,内外初始化,也可以用静态成员函数初始化 静态成员函数: 所有对象都共用一个函数 有2种访问方式:对象、类名 也有访问权限 只能访问静态成员变量,不能访问非静态成员变量 #define _CRT_SECURE_NO_WARNINGS#incl...
2020-08-23 09:10:16
242
原创 C++:new和delete
new和malloc的区别 malloc与free是库函数 new与delete是运算符 malloc不会自动调用构造函数 new会自动调用构造函数 malloc生成void*,在C++中需要强转 new直接生成对象指针 注意: 不要用void*去接受new出来的对象指针,因为可能导致delete无法正常释放对象 delete释放数组时,需要用delete[] +标识符。 new和delete的使用案例:#define _CRT_SECURE_NO_WARNINGS...
2020-08-23 08:22:25
129
原创 C++:explicit关键字
作用:防止实例化对象时对构造函数的隐式调用。只能够使用括号法和显示调用。语法:构造函数前面加 explicit关键字。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//explicit关键字 防止实例化对象时的隐式调用,只能用括号法和显示调用。class person{public: person(char *name) { } explicit person(in
2020-08-23 07:32:02
110
原创 C++:初始化列表
初始化列表:可以为类的成员属性快速赋初值。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//初始化列表可以快速地为成员属性赋初值.class person{public: //普通方式给成员属性赋初值#if 0 person(int a,int age,int c) { m_a = a; m_b = b; m_c = c; }#endif //用列表给
2020-08-22 21:30:56
114
原创 C++:深拷贝和浅拷贝
深拷贝和浅拷贝:主要是堆上的地址被多次释放的问题上的体现。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//在拷贝中,涉及到 堆上的数据的释放的时候才会出现错误,编译器不会处理这种错误,这就是浅拷贝//所以要自写拷贝构造函数来 重新申请堆上的内存。这就是深拷贝class person{public: person(char *name, int age) { m_nam.
2020-08-22 20:52:53
107
原创 C++:构造函数的分类和调用、拷贝构造函数的调用时机
构造函数的分类: 按参数: 无参构造(默认构造) 有参构造 按类型: 普通构造 拷贝构造 构造函数的调用: 括号法 显示法 隐式法 匿名对象创建 注意事项: 不要用 person p()调用无参构造,编译器会看成函数声明 不要用拷贝构造函数初始化 匿名对象,编译器会看成 对象的实例化,如果这个对象已经存在,会发生重定义错误 #define _CRT_SECURE_NO_WARNINGS#include<iostream>
2020-08-22 17:32:58
329
原创 C++:构造函数和析构函数
class myclass{public: //构造函数 //必须在公有权限声明 //构造函数没有返回值,也不需要void //构造函数名称就是类名 //构造函数可以有参数 也可以函数重载 //构造函数在类实例化时被编译器自动执行一次,也只执行一次,不需要手动调用 myclass() { cout << "构造函数实现" << endl; } //析构函数 //必须在公有权限声明 //析构函数没有返回值,也不需要void //析构函数名称是~类名.
2020-08-22 17:12:31
177
原创 C++:C与C++封装
C: 属性和行为 分为2部分:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <time.h>#include <Windows.h>//在C中,属性和行为隔离开了//属性struct person{ char *nam...
2020-08-22 15:23:50
200
原创 C++:extern “C”,C++中使用C注意事项
因为在C++中,编译器会给我们创建的函数改名(函数重载),但在C中却没有,所以extern “C”就是告诉C++编译器 这部分代码用C的方法链接。#pragma once#include <stdio.h>#ifdef __cplusplus//extern "C"{//#endif// void show();//此处加需要用到的函数或变量声明#ifdef __cplusplus //}//#endif//如果不使用上面的语句,在编译器链接时,就会出现下面的错误:
2020-08-22 13:55:08
126
原创 C++:函数重载
函数重载的条件 在同一作用域 相同的名称 不同的参数 个数,类型,顺序 注意事项: 返回值不能走位函数重载的条件 引用中,避免函数重载的二义性 默认参数中,避免函数重载的二义性 上代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//(1)函数重载的条件://1.必须在同一作用域下//2.函数的名称必须相同//3.函数的参数 个数、类型、顺序 不同时
2020-08-22 12:27:55
163
原创 C++:默认参数和占位参数
默认参数:当没有实参时,默认的值。 当函数有一个参数为默认参数,那么从这个参数起,后面的参数都必须有默认参数。 在函数的声明和定义中,默认参数只能写一次,不然编译器会报错,特别是在分文件编写中 #define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//1.默认参数void test01(int a = 10, int b = 10){ cout << "a+b=" <.
2020-08-22 11:41:07
321
原创 C++:内联函数与宏函数
为什么会有内联函数: ①宏函数必选在填括号才能提高正确性 ②宏函数填了括号也不一定达到理想效果 例子:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#define compare(a,b) (((a)>(b))?(a):(b))int main(){ int a = 10; int b = 5; int ret=compare(++a,...
2020-08-22 11:17:26
99
原创 C++:引用
①作用:起别名②语法:类型+&+标识符=value③注意:(1)引用创建时必须初始化 (2)引用初始化后不可以重新更改引用的对象④数组引用的创建:(1)直接引用 (2)typedef 定义数据类型 再引用#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;int main(){...
2020-08-21 22:15:34
77
原创 C++:using关键字
①using 声明#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;namespace space01{ int a = 13;}int main(){ int a = 12; using space01::a; //using 声明,告诉编译器我要使用space01下的a cout << "a=" << a << endl; //注.
2020-08-21 10:02:01
113
原创 C++:命名空间namespace
①命名空间的作用:防止名称冲突例子:test01.h和test02下都有Test01函数运行后:为了防止这样的情况发生,可以使用命名空间来防止名称冲突:② 命名空间可存放:变量、函数、结构、类//2.命名空间可以存放:变量、函数、结构、类namespace a{ int a = 10; void fun(); struct b{}; class c{};}③命名空间必须声明在全局作用域,不能放在函数内。④命名空间可以嵌套//4.命名...
2020-08-21 09:32:52
99
原创 C++:::(双冒号)作用域
①空+::代表全局作用域,引用全局变量#include "iostream" //C++输入输出流using namespace std; //使用标准命名空间int a = 1000;void Test0101()//::作用域测试{ int a = 2000; cout << "局部a=" << a<<endl; //采用就近原则,如果不加::作用域,就先使用局部变量 cout << "全局a=" << ::a &l
2020-08-21 08:41:41
286
原创 C++:Hello World
#include "iostream" //C++输入输出流using namespace std; //使用标准命名空间int main() //主函数入口点{ cout << "Hello World" << endl; //C++输出语句 system("pause"); return 0;}
2020-08-21 08:26:31
87
原创 C:递归函数
递归函数:在函数中调用自身。递归函数关键在于“递”和“归”,递:从最上级函数一层一层进入到最后一级函数,归:由最后一级函数开始执行关键代码,一层一层地执行到最上级函数。注意:递归函数必须要在执行自身函数前拥有标志着最后一层函数返回的语句,不然就会无限循环。int reverse1(char *str){ if (str == NULL) { return -1; } if (*str == '\0') // 函数递归调用结束条件 { return 0; } reve
2020-08-20 07:55:56
123
原创 C:动态链接库的创建和应用
动态链接库的创建:①修改编译器为编译为DLL②建立项目,在需要导出的函数和变量前面加_declspec(dllexport)动态链接库的显式调用:①需要知道函数名称#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <time.h>#incl.
2020-08-19 21:20:31
146
原创 C:静态库的创建和使用
静态库的创建:①创建一个空项目。②在头文件添加一个xxxx.h,在源文件添加一个xxxx.c,xxxx.c包含xxxx.h头文件,.h中写声明,.c中写定义③设置编译器,然后生成lib静态库的使用:(1)设置编译器 ①工程-->属性-->连接器-->常规-->附加库目录(添加静态库所在的目录) ②连接器-->输入(添加自己需要的库文件)(2)通过预处理指令设置#pragma comment(lib,"库的路径")(...
2020-08-19 19:51:38
555
原创 C:回调函数
回调函数:将函数的指针当做参数传给函数,使用这种技巧的函数叫做回调函数。例如:windows窗口的鼠标点击事件,系统不知道你要做什么,所以利用回调函数将鼠标点击的坐标传给用户,用户自己写函数去处理这个坐标。...
2020-08-19 11:01:07
91
原创 C:指针函数、函数指针、函数指针数组
指针函数:返回值是指针的函数。函数指针:一个存放函数入口点的指针,可直接当做函数使用。定义:①typedef int(p)(int,int); p* pfunc=func; ②typedef int(*p)(int,int); p func_new=func; ③int (*p)(int,int)=func;函数指针数组:一个用于存放一组具有相同返回值,参数类型的函数的指针的数组。...
2020-08-19 10:25:58
95
原创 C:内存对齐
①内存对齐第一个属性开始 从0开始偏移 第二个属性开始 要放在 该类型的大小 与 对齐模数比 取小的值 的整数倍 所有属性都计算完后,再整体做二次偏移,将整体计算的结果 要放在 结构体最大类型 与对齐模数比 取小的值的 整数倍上 结构体嵌套结构体时候,子结构体放在该结构体中最大类型 和对齐模数比 的整数倍上即#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>...
2020-08-18 11:37:16
71
原创 C:二维数组与指针
①二维数组的变量名代表的是一个一维数组的数组指针。int arr[3][3]={0};int (*arr2)[3]=arr;#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <time.h>#include <Windows.h>//
2020-08-17 20:23:38
108
原创 C:数组指针定义
①typedef int(arr)[5];②typedef int(*arr2)[5];③int (*arr)[5]=&b;#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <time.h>#include <Windows.h>.
2020-08-17 17:03:15
287
原创 C:extern与static关键字
extern和static关键字 类型 作用域 生命周期 存储位置 auto变量 一对{}内 当前函数 栈区 static局部变量 一对{}内 整个程序运行期 初始化在data段,未初始化在BSS段 extern变量
2020-08-17 12:33:15
103
原创 C:内存分区
运行前:①代码段:代码存放处②数据段 (1)已初始化全局变量和静态数据 (2)为初始化全局变量和静态数据运行后①堆(heap):动态内存分配②栈(stack):局部变量
2020-08-17 12:28:12
157
原创 C:sizeof和strlen的区别
①sizeof是操作符,strlen是字符串操作函数;②sizeof返回的是字符串字节数,包括'\0';strlen也是返回的是字符串字节数,但不包括'\0';例如:sizeof("woaini");//返回的是7strlen("woaini");//返回的是6...
2020-08-17 12:25:40
84
原创 C:指针做参数注意事项
指针做参数:传值,这个值是是指针所保存的地址数据。注意:一个指针A,被作为函数参数AA时,A与AA代表的是两个不同内存区域的指针,但他们保存的数据是一样的,相当于AA重新开辟了内存空间(堆栈)来复制一份A的数据,所以修改AA不会影响A。这个在申请动态内存不能通过AA来更改A。例子:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>
2020-08-17 09:59:30
264
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人