自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 【数据结构】泛型(分享重点)

泛型就是适用于许多许多类型,对类型参数化。表示一个可以容纳任何类型元素的列表。代表占位符,表示当前类是一个泛型类。用于在泛型的使用,即为通配符。下面我们看两段代码的对比。

2024-04-14 21:28:26 221 1

原创 【JAVA】多态

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的 方法,此时:将父类引用再还原为子类对象即可,即向下转换。最好的方式是:重新定义一个新的类,来重复利用其中共性的内容, 并且添加或者改动新的内容。3. 通过父类的引用调用重写的方法 多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。【使用多态的好处】 1. 能够降低代码的 "圈复杂度", 避免使用大量的 if - else。2. 子类必须要对父类中方法进行重写。运行结果: 元宝吃鱼~~~

2024-03-28 07:00:00 203

原创 【JAVA】继承

通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用 方法适传递的参数选择合适的方法访问,如果没有则报错。:成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时 再到父类中找,如果父类中也没有则报错。通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到 则访问,否则编译报错。如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。能用组合尽量用 组合。

2024-03-27 07:00:00 169

原创 【JAVA】类和对象

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次),主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干 啥),描述完成后计算机就可以识别了。定义了一个类,就相当于在计算机中定义了一种新的类型,用类类型创建对象的过程,称为类的实例化。如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。class为定义类的关键字,ClassName为类的名字,{}中为类的主体。构造方法(也称为构造器)是一个特殊的成员方法,

2024-03-26 07:15:00 1862

原创 【JAVA】建立一个图书管理系统

如果找到匹配的书名,则将该书的借阅状态设为 true(通过调用 book.setBorrwed(true)),输出借阅成功的消息,并打印出借阅后的图书详细信息。遍历图书列表中的所有图书(通过 booklist.getBook(i) 获取每一本书),比较每本书的书名是否与用户输入的书名相同。这些操作是管理员用户在图书管理系统中可以执行的动作,相比普通用户,管理员拥有更多的权限,例如新增和删除图书。) 开始,将后面的所有图书向前移动一位,覆盖掉待删除图书的位置,相当于删除了该书。从控制台读取用户的选择。

2024-03-25 22:41:42 1747

原创 【JAVA】接口

2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错。在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接 口。下面通过类来表示一组动物.一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类。3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现。5. 接口中不能有静态代码块和构造方法。

2024-03-25 12:44:35 132

原创 【JAVA】抽象类

使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类 了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.抽象方法不能是 private 的。

2024-03-25 12:31:27 208

原创 【JAVA】super和this

4. 在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造 方法中出现。3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在。3. this是非静态成员方法的一个隐藏参数,super不是隐藏的参数。2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段。,当前对象即调用实例方法的对象,super相当于是子类对象中从。1. 都是Java中的关键字。2. 在非静态成员方法中,

2024-03-25 11:43:20 220

原创 【JAVA】static修饰的成员变量与方法(静态变量)

一般类中的数据成员都设置为private,而成员方法设置为public,那设置之后,Student类中classRoom属性如何 在类外访问呢?4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用。如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并。静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的。. 不属于某个具体的对象,是类的属性,2. 可以通过对象调用,也可以通过。的,不存储在某个对象的空间中。

2024-03-25 11:13:50 387

原创 【JAVA】封装与包

包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可。一般情况下成员变量设置为private,成员方法设置为public。可以使用 import语句导入包.rotected主要是用在继承中。

2024-03-25 10:44:21 176

原创 【JAVA】数组的定义和使用

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操 作. 一旦尝试读写, 就会抛出 NullPointerException.null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用。JAVA的数组和c语言的相似但是在创建上略有不同。如果没有对数组进行初始化,数组中元素有其默认值。他们两个的主要区别就是一个直接赋值一个没有。T:表示数组中存放元素的类型。T[]:表示数组的类型。

2024-03-25 07:00:00 227

原创 【JAVA】方法的使用

可以看到,在swap函数交换之后,形参x和y的值发生了改变,但是main方法中a和b还是交换之前的值,即没有交 换成功 这是传值和传址的区别。调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下 执行。1. 方法名必须相同 2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同) 3. 与返回值类型是否相同无关。比如:方法中不能定义两个名字一样的变量,那为什么类中就 可以定义方法名相同的方法呢?

2024-03-24 20:16:13 125

原创 位运算符与位移运算符

有三个: <<, >> ,>>>,都是二元运算符,且都是按照二进制比特位来运算的。. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1). 无符号右移 >>>: 最右侧位不要了, 最左侧补 0。1. 左移 <<: 最左侧位不要了, 最右侧补 0.按位与& 两个二进制数字都是1 取1否则取0。按位或I 两个二进制数字都是0取0否则取1。按位取反~如果该位为0则1 ,为1取0。按位异或 ^ 相同为零相反为1。

2024-03-24 20:02:10 262

原创 【JAVA】数据类型与变量

整形 byte(1) short(2) int(4) long(8)布尔类型要么是 true 要么是false 所以部分确定大小。浮点数 float(4) double(8)长整形赋值给短整形 可能会丢失数据。布尔 boolen(无法确定)字符 char(2)

2024-03-14 08:46:42 329

原创 【c语言】程序环境和预处理

define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件 编译指令。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。#define 定义标识符。程序的翻译环境和执行环境。#define的宏定义。

2024-03-10 16:12:40 357

原创 【c语言】文件操作

文件使用方式 含义 如果指定文件不存在 “r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错 “w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件 “a”(追加) 向文本文件尾添加数据 建立一个新的文件。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀 例如: c:\code\test.txt。打开文件之后要关闭文件。

2024-03-10 15:48:45 343

原创 【c++修仙】c语言练气第九重动态内存管理

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。如果开辟成功,则返回一个指向开辟好空间的指针。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。但是有时候我们需要的空间大小是在程序运行的时候才能知道的。对动态开辟空间的越界访问。

2024-03-10 15:32:30 307

原创 【c语言】冒泡排序

比如第一个 与相邻的后面一个进行比较如果大于后一位数则与他交互位置。冒泡排序的基本概念是 先在数组里拿出一个值。i<sz-1 因为不用和自身比较;

2024-03-09 16:38:51 325 1

原创 【c语言】二分查找

那么这里为什么不是头加尾呢 因为如果两个值过大的话容易溢出 所以left+(right-left)/2和头尾相加除以2是一样的。用sizeof函数来求出数组的大小 随后来判断目标值与mid下标的值的大小。头加尾,找到中间的数 随后判断中间的数是大了还是小了。二分查找总的一个概念是。

2024-03-09 16:32:11 346 1

原创 【c语言项目】通讯录一步一步(超详细)

然后我们来想象一下这个一个人的信息,那么我们就要再建立一个结构体来存放他的信息 那么这就是通讯录。首先我们通讯录可以存放各种信息比如 名字 姓名 年龄等等 所以我们需要一个结构体来帮助我们。这边我们用枚举来控制case的进入 因为枚举默认值为0 这样可以增加代码的可读性。这个比较简单 只要利用上面的find函数再把他打印出来就可以。pc->是date的地址,填充0 sizeof填充的字节数。与上面相同 找到联系人后修改就好 注意date 的下标要改。使用后一个date的空间来覆盖前面一个的。

2024-03-09 11:03:38 361 1

原创 【c语言小游戏】扫雷 一步一步教你做

ROW LOSS初始化棋牌 为了防止越界访问我们设置11 11 的棋盘 实际为9×9。findmine函数是查找周围的雷 九宫阁上其他八个的位置 减去字符数得到数字。接下来我们打印这个棋盘 为了方便寻找我们在棋盘上打印数字方便输入坐标。注意不要把do while循环放在scanf下面不然会死循环。因为我们要一个拿来布置雷一个拿来给玩游戏的人看 (看不到雷)我们要判断两个 函数所以形参 要两个数组。时间戳空指针 强制类型转换无符号整数。为了让雷随机布置我们用rand函数。这样我们基本的逻辑就已经完成。

2024-03-07 23:16:55 365

原创 c语言小游戏三子棋

函数通过遍历整个棋盘,检查每个元素是否为空格。如果在遍历过程中遇到任何一个空格,则立即返回0,表示棋盘未满;只有当整个棋盘都被非空格字符填充时,才会执行完循环,并最终返回1,表示棋盘已满。if的条件是因为更好的看到坐标 下棋 所以我们没有从0下标开始而是从1.打印这个棋盘 这里要注意的是棋盘是怎么打印的 行打印| 列打印___遍历这个数组初始化为空格 这里的ROW 与COL可以用。我们用二维数组来表示一个棋盘 首先初始化二维数组。接下来我们处理玩家下棋与电脑下棋的函数表达。横相等 列相等 斜线相等。

2024-03-06 21:52:53 343 1

原创 c++练气第八重c语音自定义类型

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联。编译器会把上面的两个声明当成完全不同的两个类型。结构体内存对齐就是拿空间换取时间的做法。相比s1类型s2所占的空间大小要小很多。合至少得有能力保存最大的那个成员)所以我们在设计的时候要对齐。结构体变量的定义和初始化。例如月份可以一一列举。

2024-03-04 17:14:20 346 1

原创 【c语言法宝】字符函数和字符串函数

字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。目标空间必须有足够的大,能容纳下源字符串的内容。

2024-03-04 15:49:26 318 1

原创 c++练气第7层c语言指针的进阶

如果你把函数的指针(地址)作为参数传递给另一个函数,当 这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调 用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回 值类型为void。指向函数指针数组的指针是一个 指针 指针指向一个 数组 ,数组的元素都是 函数指针;首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针?

2024-03-01 07:56:19 356 1

原创 const函数的应用

1. const如果放在*的左边,修饰的是指针指向的内容,保证。2. const如果放在*的右边,修饰的是指针变量本身,保证了。不能修改,但是指针指向的内容,可以通过指针改变。但是指针变量本身的内容可变。

2024-02-27 20:27:55 369

原创 【修仙法宝】c语言调试技巧

F9 创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。F11 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最 长用的)。CTRL + F5 开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。F10 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。比如一个无限循环的代码在release环境下会,变成有限(这只是一个优化例子)。

2024-02-27 20:12:23 348

原创 【无标题】c++练气第六层c语言结构体

结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。我们可以看到 s 有成员 name 和 age;那我们如何访问s的成员?结构体指针访问另一个结构体指针。例如怎么描述一个学生。

2024-02-27 19:57:52 348

原创 c语言数据的储存

在计算机系统中,数值一律用补码来表示和存储。同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程 是相同的,不需要额外的硬件电路。小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中;三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,(-1)^S * M * 2^E (-1)^S表示符号位,当S=0,V为正数;

2024-02-26 22:40:36 287 1

原创 c++练气第五重c语言指针初阶

指针理解的2个要点: 1. 指针是内存中一个最小单元的编号,也就是地址 2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。(取地址操作符)取出变量的内存起始地址,把地址可以存放到一个变量中,这个 变量就是指针变量。ppa通过对ppa中的地址进行解引用,这样找到的是pa,*ppa其实访问的就是pa.指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)//p存放的是数组首元素的地址。那指针类型的意义是什么?

2024-02-21 15:46:39 382

原创 c++练气第四重c语言操作符详解

3. 移位操作符 3.1 左移操作符 移位规则: 左边抛弃、右边补0 + - * / % 左移操作符 >> 右移操作符 注:移位操作符的操作数只能是整数。3.2 右移操作符 移位规则: 首先右移运算分两种: 1. 逻辑移位 左边用0填充,右边丢弃 2. 算术移位 左边用原该值的符号位填充,右边丢弃。接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。1. 操作符的优先级 2. 操作符的结合性 3. 是否控制求值顺序。//实用下标引用操作符。

2024-02-21 13:39:45 298

原创 c++练气第三重c语言数组

二维数组如果有初始化,行可以省略,列不能省略。最前面是类型 []里是数组大小。数组是使用下标来访问的,下标是从。数组的大小可以通过计算得到。数组在内存中是连续存放的。二维数组也是连续储存的。

2024-02-13 16:54:41 332 1

原创 void和int的区别

nt是一种有符号整数类型,可以表示正数、负数和零,而void是一种特殊的类型,表示没有返回值。这两个是等效的可以替换。

2024-02-12 23:54:46 619 1

原创 c++练气练气第二层函数运用

x和y两个形参 在main函数 num1 , mum2 两个实参。可以看到我们直接调用自定函数得出了最大值。举一个例子,这是一个两个数比较找出最大值,可看到我们在main 函数上定义了一个自定函数。,运用到你的代码中。试想一下如果都是给定函数,那需要程序员做什么呢。这个函数输出结果是hh 可以看到层层调用了函数。简单来说实参实真实的值,而形参只在函数中有效。递归有点类似于循环,但是递归要满足两个条件。函数是能自己设计的函数(当然也有库函数)函数是可以相互调用的但是不能嵌套。但是注意的是函数不能嵌套。

2024-02-12 23:40:25 320 1

原创 c++练气第一重c语言分支语句和循环语句

if语句要注意匹配else的时候 else永远是匹配最后一个if的,如何要多个嵌套if语句建议在判断条件后加入{} 方便分辨也方便匹配如,不要在()后面加;我们上面学过了if语句 当满足条件的情况下执行,但是只会执行一次。所有switch语句就出现了可以帮助我们更方便的选择如。它可以出现在语句列表的任何位置,而且语句流会像执行一个。循环至少执行一次,使用的场景有限,所以不是经常使用。break使用才能实现真正的分支。的实际效果是把语句列表划分为不同的分支部分。语句和标记跳转的标号。

2024-02-06 17:13:05 372 2

原创 如何在vs中加入#define _CRT_SECURE_NO_WARNINGS

如果scanf函数在vs中报错

2024-02-03 11:30:33 713 2

原创 记录自己学习c++的过程

希望自己能进家乡的宁德时代。

2024-01-31 11:16:18 468

空空如也

空空如也

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

TA关注的人

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