自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态多态——java

(Polymorphism)是面向对象编程(OOP)的一个核心概念,它允许一个接口被多个类实现,从而使得一个方法调用可以根据对象的实际类型表现出不同的行为。运行时多态(动态多态):通过方法重写(Method Overriding)和接口实现(Interface Implementation)实现。instanceof 用于检查对象是否是某个类或接口的实例,确保类型的安全性。动态绑定:在运行时根据对象的实际类型调用相应的方法。方法重写:子类重写父类的方法,提供不同的实现。向上转型:使用父类引用指向子类对象。

2024-07-25 23:02:55 172

原创 Object类——java

1.Object类是所有类的根类,提供了一些基础方法,如equalshashCodetoStringclonenotifywait等。2.可以根据需求在子类中重写这些方法,以实现自定义的行为。3.Object类的方法在实现多线程同步、对象比较和对象字符串表示等方面非常重要。

2024-07-25 14:21:07 519

原创 java之继承

一个类可以继承另一个类的属性和方法(不支持多继承),这个被继承的类称为父类(或超类、基类),继承它的类称为子类(或派生类)。private:私有成员,只有类本身可以访问,子类不能直接访问,但可以通过父类的内置函数间接修改。访问父类成员:子类可以使用 super 关键字来访问父类的成员(属性和方法)。方法重写:子类可以重写父类的方法,使用相同的方法名、参数和返回类型。default(无修饰符):包私有成员,同一个包内的类可以访问。protected:受保护成员,子类和同一个包内的类可以访问。

2024-07-25 14:03:00 137

原创 单例设计模式

以下是单例模式的常见实现方法,包括懒汉式、饿汉式和双重检查锁定。静态内部类在类加载时不会立即实例化,只有在调用 getInstance 方法时才会加载。饿汉式单例在类加载时就创建实例。枚举单例是实现单例模式的最佳方式之一,因为它不仅实现了线程安全,还防止了反序列化和反射攻击。通过在 getInstance 方法上添加同步,可以使懒汉式单例线程安全,但会降低性能。双重检查锁定结合了懒汉式和饿汉式的优点,通过减少同步的开销实现线程安全的懒加载。饿汉式单例:在类加载时即创建实例,线程安全但无延迟加载。

2024-07-24 22:00:44 218

原创 访问修饰限定符

default(不使用任何关键字,即不写修饰符):在同一包中可见,不使用任何修饰符。该访问级别仅适用于同一包内的类。private:在同一个类中可见。私有访问修饰符是最严格的访问级别,在同一类中的成员能够访问。protected:对同一包内的类和所有子类可见。在不同包中的子类也可以访问。public:对所有类可见。该访问级别仅适用于应用程序的外部接口。

2024-07-24 15:55:31 85

原创 java内部类

Java 中的内部类(inner class)是定义在另一个类内部的类。成员内部类是定义在另一个类的内部且不带 static 关键字的类。静态内部类不能直接访问外部类的非静态成员,但可以通过创建外部类实例来访问。匿名内部类是没有名字的内部类,通常在需要快速定义和使用一次性类时使用。局部内部类是在方法或代码块中定义的类。局部内部类:定义在方法或代码块内部,仅在其所在的方法或代码块中可见。成员内部类:定义在类内部,非静态,可以访问外部类的所有成员。匿名内部类:没有名字的内部类,通常用于快速实现接口或继承类。

2024-07-24 15:47:54 198

原创 java关键字static

静态方法(类方法)可以直接通过类名调用(建议直接用类名直接访问),而不需要创建类的实例。注意:静态方法中不可以使用this关键字,this代指的是调用该方法的实例对象,而静态方法是可以通过类名直接调用的。静态变量(类变量)是属于类的,而不是某个特定的实例。特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次。静态方法:可以直接通过类名调用,不能访问非静态成员。静态代码块:在类加载时执行一次性的初始化代码。作用:完成类的初始化,即对静态变量的初始化。静态变量:类的所有实例共享同一个变量。

2024-07-24 11:28:08 198

原创 String 和StringBuilder字符串操作快慢的举例比较

StringBuilder明显快于String。

2024-07-21 23:41:33 222

原创 StringBuilder, Stringbuffer,StringJoiner

StringBuilder:适用于单线程环境中需要频繁修改字符串的场景,具有高效的性能。StringBuffer:适用于多线程环境中需要频繁修改字符串的场景,线程安全但性能稍逊于 StringBuilder。StringJoiner:适用于需要构建带定界符的字符串序列的场景,提供了简洁的 API 来处理前缀、后缀和分隔符。

2024-07-21 23:11:26 276

原创 String

在 Java 中,String 是一种特殊的类,用于表示和操作字符串。String 对象在内存中的存储方式有其独特之处。,一旦创建,字符串内容。它主要用于表示不可变的字符序列。

2024-07-21 18:30:23 321

原创 java相对于c++的改进

Java 的自动内存管理、丰富的标准库、强类型系统和跨平台能力,使其成为企业级应用开发的首选语言。:Java 通过 JVM 实现了“一次编写,到处运行”,Java 字节码可以在任何安装了 JVM 的平台上运行。:Java 只支持类的单继承,但通过接口(interface)实现多继承的功能。:Java 程序运行在 JVM 上,JVM 屏蔽了底层操作系统和硬件的差异。:Java 消除了指针的概念,避免了直接内存操作带来的安全隐患。:Java 是强类型语言,编译时和运行时都有严格的类型检查。

2024-07-21 16:09:24 139

原创 c++STLstack和queue容器

queue容器中有默认构造函数和拷贝构造函数,以及重载等号操作符,用于queue的初始化。stack容器中有默认构造函数和拷贝构造函数,以及重载等号操作符,用于stack的初始化。pop(),从对头移除第一个元素,并返回移除的元素。push(elem),向栈顶添加元素。push(elem),向队尾添加元素。pop(),从栈顶移除第一个元素。back()返回最后一个元素。front()返回第一个元素。先进后出,不允许有遍历行为。size(),返回栈的大小。size(),返回队的大小。top()返回栈顶元素。

2023-04-29 15:24:11 110

原创 c++STLmap/multimap容器

map和multimap区别(和set容器相似):map不允许有重复的key值元素,而multimap可以。count(key)统计key的元素个数,map中为1或0,multimap可以为多个。pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)map/multimap属于关联式容器,底层结构是用二叉树实现的。优点:可以根据key值快速找到value值。成对出现的数据,利用对组可以返回两个数据。两个对组相等key和value均相等。map中所有的元素都是pair。

2023-04-28 21:31:45 127

原创 用递归和递推解决01背包问题

【代码】用递归和递推解决01背包问题。

2023-04-22 19:48:57 140

原创 c++STL set/multiset容器

set默认升序排列,想要改变需要仿函数,cmp类的成员函数bool operator()(int a, int b)const,其中const是VS中要求的,在devc++运行不需要。set容器使用insert函数插入重复数据时,会插入失败,但不会报错,不过insert函数会返回bool类型false;find(key)查找key是否存在,若存在,返回该元素的迭代器,若不存在返回set.end();cout(key)统计key元素的个数在set容器中为1或0,multiset容器中答案不确定。

2023-03-28 18:54:51 132

原创 C++STL list容器

list有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector,deque等都是都是不成立的。由于链表的储存方式并不是连续的内存空间,因此链表中的迭代器只能支持前移和后移,属于双向迭代器。链表:是一种物理储存单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。节点的组成:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。2.链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素。back():返回容器最后一个元素。

2023-03-27 22:34:57 33

原创 c++STLdeque容器

vector相当于的数组,而deque内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据。中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。成员函数resize(num)重新指定容器的长度为num,若容器变长,则以默认值填充位置,如果容器变短,则末尾超出容器的元素被删除。事实上能够跳跃式访问的容器都没有提供成员函数sort。对于支持随机访问的迭代器的容器,都可以直接使用sort函数进行排序。3.vector访问元素时的速度会比deque快,这和两者的内部实现有关。

2023-03-26 19:19:21 49

原创 洛谷题c++高精度

当数据类型过大,以至于long long类型都无法存储,就需要使用高精度这种方法了。使用char类型的数组进行储存超大数,然后将超大数的每一位储存进一个整数类型的数组中,然后进行运算。高精度乘法运算要比加法难一点,主要体现在数据的处理上。1.将超大数中的每一位储存进整型数组。2.对整型数组中的数据进行处理。3.输出整型数组中的每一位。

2023-03-11 14:24:12 127

原创 STL vector容器

函数resize(int num),重新指定容器的长度为num,若容器变长,则以默认值填充新位置,默认值一般是0.如果容器变短,则末尾超出容器长度的元素被删除。resize(int num,elem) ,重新指定容器的长度为num,若容器变长,则以elem值填充新位置.如果容器变短,则末尾超出容器长度的元素被删除。动态扩展并不是在原空间后接续新空间,而是找到更大的内存空间,然后将原数据拷贝到新空间,释放原空间。函数reserve(int len)容器预留len个元素长度,预留位置不初始化,元素不可访问。

2023-03-10 22:31:14 37

原创 c++ primer plus读书笔记(前三章)

计算表达式时先c++(表达式全是整型类型)将bool,signed char ,char,unsigned char,short转换为int类型在进行表达式运算。ANSI/ISO c++标准规定:如果编译器到达main()结尾没有遇到返回语句,则认为main()函数以return 0结尾。任何数字值或指针值都可以被隐式转换(既不用显示强制类型转换)bool值,任何非零转换为true,零转换为false.int类型是对计算机最合适的类型,如无特殊情况,一般使用int类型。此笔记是我自认为是有用知识的补充!

2023-03-10 16:25:27 39

原创 洛谷P1042 [NOIP2003 普及组] 乒乓球

【代码】洛谷P1042 [NOIP2003 普及组] 乒乓球。

2023-03-07 19:33:38 188

原创 洛谷p2670【 [NOIP2015 普及组] 扫雷游戏】

【代码】洛谷p2670【 [NOIP2015 普及组] 扫雷游戏】

2023-03-07 19:30:33 192

原创 c++模板之类模板

1.当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型,如果不能指定,编译器无法给子类分配内存。很容易理解:普通类的成员函数返回类型和参数类型都是确定的,而类模板的成员函数需要确认T的类型。类模板的作用:建立一个通用类,类中的成员,数据类型可以不具体制定,用一个虚拟的类型来代表。类模板和函数模板语法相似,在声明模板template后面加类,此类成为类模板。2.类模板在模板参数列表中可以有默认参数,并且默认实参要从形参列表的。类模板的成员函数类外现实时,需要加上模板参数列表。

2023-02-07 11:41:40 94

原创 c++函数模板

既然提供了函数模板,最好就不要提供普通函数(提供的函数模板可以达到此普通函数的作用),否则容易出现二义性。建立一个通用函数,其函数的返回值类型和形参类型可以不具体制定,用一个虚拟的类型代表。无法确定T的类型,所以不可以使用模板,此行代码错误;一般情况下建议使用显式指定类型的方式,调用函数模板,应为自己可以确定指定类型T。2.函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换。1.如果函数模板和普通函数都可以实现,优先调用普通函数。4.如果函数模板可以产生更好的匹配,优先调用函数模板。

2023-02-04 21:02:28 63

原创 STL容器string的使用

string的本质是一个类,类内部封装了char*,管理字符串,是一char。另外string内部重载了assign函数用于string对象的赋值。string类重载了+=和append函数实现字符串的拼接。string既然是一个类,那么他就可以像类那样初始化。查找函数find和refind。从string类型中获得子字符串。find查找第一次出现的位置。string中单个字符的存取。string字符串的插入。string字符串的删除。替换函数replace。比较函数compare。

2023-01-31 20:04:15 57

原创 c++STL简单介绍

提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露容器内部的表达方式。为了建立数据结构和算法的一套标准,诞生了STL。c++的面向对象和泛型编程思想,目的就是复用性的提升。常用的数据结构有数组,链表,树,栈,队列,集合,映射表等。容器又分为两种:序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。非质变算法:指运算过程中不会更改区间内的元素内容,例如查找,遍历…关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。有限的步骤解决逻辑或数学上的问题,这门学科叫做算法。

2023-01-29 21:29:34 69

原创 c++二进制文件读写

【代码】c++二进制文件读写。

2023-01-28 22:05:48 59

原创 c++文本文件读写

1.文本文件:文件以文本的ASCII码的形式储存在计算机中。通过文件可以将数据持久化,以达到多次利用和储存的目的。2.二进制文件:以文本的二进制形式存储在计算机中。这里就自动生成了文件。

2023-01-27 23:10:01 391

原创 c++多态

使用多态时:如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码;:将父类中的析构函数改为虚构函数或纯虚构函数。1.静态多态:函数重载和运算符重载属于静态多态,复用函数名。子类必须重写抽象类中的纯虚函数,否则也属于抽象类。静态多态的函数地址早绑定——编译阶段确定函数地址。动态多态的函数地址晚绑定——运行阶段确定函数地址。重写:函数返回值类型,函数名,参数列表完全一致;2.动态多态:派生类和虚函数实现运行时多态。拥有纯虚析构函数的类也属于抽象类;父类中的虚函数没有用改为纯虚函数。

2023-01-24 16:12:14 98

原创 c++继承

c++继承基础知识(较全面)

2023-01-20 16:10:21 88

原创 函数调用运算符的重载

由于重载后的使用方式和函数调用非常像,因此成为仿函数;函数调用运算符()也可以重载;仿函数没有固定写法,非常灵活;

2023-01-19 09:25:23 83

原创 等号运算符重载

【代码】等号运算符重载。

2023-01-19 08:52:26 81

原创 赋值运算符的重载

赋值运算符的重载主要解决浅拷贝和深拷贝问题。赋值运算符的重载只能在类内实现。

2023-01-18 20:54:29 154

原创 递增与算符的重载

递增与算符的重载分为前置++,和后置++;

2023-01-18 12:25:01 56

原创 左移运算符重载

【代码】左移运算符重载。

2023-01-17 21:08:48 53

原创 c++加号运算符重载

列如+可以用来两个数相加,却无法用于两个类的相加。而运算符的重载就是用于解决这种的问题。关键字**operator **对已有的运算符进行定义,赋予其另一种功能,以适用不同的数据类型。注意:1.对于内置的数据类型的表达式的运算符是不可能改变的;第一篇:+号运算符的重载。2.不要滥用运算符重载。

2023-01-17 19:42:23 551

原创 c++友元

在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元技术;(1)全局函数做友元。(3)成员函数做友元。

2022-12-22 18:20:01 56

原创 c++常函数和常对象

(1)成员函数后加const后我们称为这个函数为常函数。(1)声明对象前加const称该对象为常对象。(2)常函数内不可以修改成员属性。(3)成员属性声明时加关键字。后,在常函数中依然可以修改。(2)常对象只能调用常函数。

2022-12-21 22:20:15 68

原创 c++ this指针的使用

每一个非静态成员函数只会诞生一份函数实例,也就是说多个 同类型的对象会共用一块代码。代码块是如何区分是哪个对象调用自己的呢?this指针是隐含在每一个非静态成员函数内的一种指针,this指针不需要定义,直接使用即可;2.在类的非静态成员函数中返回对象本身,可使用return*this;1.当形参和成员变量同名时,可应用this指针区分;我们知道在c++成员变量和成员函数是分开储存的。c++通过this指针解决这个问题。

2022-12-21 21:10:05 71

原创 c++静态成员(变量和函数)

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。(2)静态成员函数只能访问静态成员变量。(1)所有对象共享同一份数据。(1)所有对象共享同一个函数。(3)类内声明,类外初始化。(2)在编译阶段分配内存。

2022-12-18 14:59:02 89

空空如也

空空如也

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

TA关注的人

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