- 博客(50)
- 收藏
- 关注
原创 三、关系数据库
笛卡尔积(Cartesian Product)给定一组集合D1,D2,……,Dn(可以有相同的),其笛卡尔积D1×D2××Dnd1d2dn∣di∈Dii12nD1×D2×……×Dn{(d1d2……dn∣di∈Dii12……nD1123D2abD1×D21a1.b2a2b3a3bD1123D2。
2025-05-18 16:21:49
655
原创 二、数据模型
数据模型(Data Model)说明:数据模型主要分为三类:概念数据模型、基本数据模型、物理数据模型概念模型数据模型数据模型的三要素:在数据库中使用来抽象、表示和处理和信息。基本过程—
2025-05-17 12:31:53
623
原创 一、数据库系统概述
数据(Data)描述事物的符号记录(表示信息的符号,信息的载体形式多样:数组、文字、图形、图像、声音……数据处理收集、加工、应用、储存、传播等过程数据管理对数据进行分类、组织、编码、存储、检索和维护等是数据处理的中心问题怎么管?——数据管理技术数据的语义数据的含义数据的解释(对数据含义的说明)数据与其语义是不可分的。(例如刻舟求剑、结绳记事,单单拿出这些是没有意义的,要对这些成语进行解释)数据及其语义示例学生记录(李明,男,199505,江苏南京市,计算机系,2013)语义。
2025-05-15 11:54:40
849
原创 十六、Template(模板)
Template重用的是源代码,而不是像继承和组合那样重用对象代码。Template 通过使用类型作为参数,直接支持泛型编程(写一次代码,用多种类型)。Template(模板) 包括类模板和函数模板。从模板生成类或函数的过程被称为模板实例化。模板实例化fill:#333;color:#333;color:#333;fill:none;实例化Instantiation实例化Instantiation实例化Instantiation模板Templates。
2025-05-13 08:56:36
955
原创 十五、多态与虚函数
如果一个函数在其基类中被声明为virtual, 那么它在所有派生类中也是virtual的。在派生类中重新定义一个virtual函数,通常称之为重写(Overriding)。多态(Polymorphism):同名但不同实现的函数。虚函数(通过重写)是动态决定调用哪一个函数的。函数重载(Function overloading):是静态决定调用哪个版本的函数。示例 C15:Instrument2.cpppublic:public://重写虚函数。
2025-05-12 21:04:13
897
原创 十四、继承与组合(Inheritance & Composition)
方面public继承protected继承private继承基类的public成员在派生类中变成publicprotectedprivate基类的proitected成员在派生类中变成protectedptivate基类的private成员在派生类中变成不可访问不可访问不可访问派生类成员函数能访问哪些基类成员public和protectedpublic和protectedpublic和protected派生类对象能访问哪些基类成员public无法访问任何成员无法访问热河成员。
2025-05-12 21:01:10
1198
原创 十三、动态对象创建(Dynamic Object Creation)
使用newdelete创建和销毁一个对象使用new[]delete []创建和销毁一个数组。
2025-05-12 20:55:08
210
原创 十二、操作符重载
运算符函数的命名方式按运算元个数分类:一元、二元、三元运算符可以重载的运算符不可重载的运算符重载实现方式成员函数方式友元函数方式[]++--、类型转换、<<>>以访问类的私有成员变量,同时<<和>>左边是ostream或istream类型(例如<<的左边就是ostream类型),因此要把流运算符重载为友元函数下面示例定义了一个date类,并重载<<和>>运算符以支持日期的输入和输出。public:private://注意ost引用ostream类对象。
2025-05-12 20:54:12
555
原创 十一、引用与拷贝函数(References & the Copy-Constructor)
引用() 通常用于函数参数列表和函数返回值,但你也可以创建一个独立存在的引用。引用在创建时必须被初始化(指针可以先创建,然后再初始化)。一旦引用被初始化为指向某个对象,它就不能被更改为去引用另一个对象。(指针可以重新指向另一个对象)引用始终不能是NULL。必须始终能够假设引用连接到了一个合法的存储区域。示例int& m=a;int n = m;m = m + 5;
2025-05-12 20:47:03
639
原创 十、名字控制(Name Control)
所谓的静态对象(静态元素)是指:在程序运行期间,存储在静态存储区(static storage area)生命周期贯穿整个程序的对象。类型示例说明全局变量int x = 5;存在于整个程序静态局部变量函数内部static,记住上次值类的静态成员变量属于整个类namespace作用域的静态对象同样是静态存储静态类对象构造一次,用到最后关键字static对象被创建在一个特殊的静态数据区(static data area),而不是每次函数调用时创建的**栈(stack)**上,
2025-05-12 20:43:52
696
原创 九、内联函数(Inline Functions)
当一个函数代码只有几行,但会被频繁调用时,我们可以使用inline来节省时间并提高效率。内联函数是一个真正的函数,它在调用处被直接展开,就像预处理宏一样,因此可以消除函数调用的开销。内联函数 = 真正的函数 + 具有宏替换的效率。因此,我们在写代码是,应该永远不要使用宏,而是使用内联函数。示例内联函数 = 结合了宏的效率和函数的安全性。类内定义的函数默认使inline大型工程中,最好将inline函数定义写在类外,保持接口整洁。
2025-05-12 20:40:23
678
原创 八、Constants(常量)
如果你是通过地址传递和返回const表示你承诺不会改变该地址所指向的内容。如果你是通过值传递对象, 指定cosnt对于调用者来说是没有意义的。如果你是以const方式按值返回一个类对象,这意味着返回值不能作为左值使用(即不能被赋值或修改)。但是这里需要强调的是cosnt修饰指针与cosnt修饰一些比如intchar等等非指针类型不同。int a = 9;对于非指针类型,const。
2025-05-12 20:38:29
847
原创 七、函数重载与默认参数(Function Overloading & Default Arguments)
默认参数是在函数声明中给定的一个值,当你在调用函数时没有提供对应的参数值,编译器会自动填入这个默认值。就像函数重载一样,默认参数允许你在不同情况下使用相同的函数名和函数重载不同之处在于,是用默认参数时,是编译器在替你填补参数值,而不是你手动写出多个函数版本。函数重载:使用相同函数名,处理不同类型或数量参数。默认参数:简化函数调用,提升接口友好性。
2025-05-12 20:33:58
761
原创 六、初始化与清理(Initialization & cleanup)
在C++中,清理适合初始化一样重要的。析构函数(Destructor)可以用于对象销毁的清理操作。特点名字为~类名无参数,不可重载无返回值编译器在对象销毁时自动调用C++支持在作用域的任意位置定义变量。最佳实践尽可能靠近使用初定义变量定义时初始化这样做有助于提升安全性与代码可读性聚合初始化是C++中一种通过大括号{}一次性为所有成员赋值的方式。它专门用于“简单的结构体或类”,也就是所谓的“聚合类型”,但也不限于聚合类型。构造函数(初始化对象)析构函数(销毁时清理资源)
2025-05-12 20:32:38
493
原创 五、实现隐藏(Hiding the Implementation)
友元函数是一种有特权的函数。允许外部函数(友元函数)或类(友元类)访问本类的私有成员。一个普通的public该函数可以访问类对象的私有部分。该函数属于类的作用域中。(这个函数是在类的”命名空间里面“定义的,它是类的一部分)该函数必须通过对象调用(拥有一个this指针)。一个成员函数仅具有前两个特性。一个friend函数仅具有第一个特性。使用作用域解析符。month = m;day = d;
2025-05-12 20:32:02
521
原创 四、数据抽象(Data Abstraction)
C++类与结构体的区别:类与结构体相似,唯一的区别在于类默认是private,而结构体默认是public。在C++中,类是面向对象编程(OOP)的基础概念。在C++中,对象就是一快有唯一标识或内存地址的存储区域。那些仅仅把函数打包进数据结构的语言是_面向对象的基础语言(object-based)_ ,而不是_真正面向对象的语言(object-oriented)_。**封装(encapsulation):**将数据和相关的操作包装成一个新的数据类型,称为抽象数据类型(ADT)。Stash。
2025-05-12 20:30:44
607
原创 三、The C in C++
int i,j;delet p;由此可见f()的地址在代码段/文本段,属于静态分配dog,cat,bird,全局变量地址,地址相邻,分配在静态区(BSS段)i、j, 局部变量,地址较低,且和全局变量区分明显,属于栈区,且高地址向低地址增长&p , 局部变量int * p本身的地址,也是栈区&(_p) , 动态分配的int 类型变量地址(通过*_new int),属于堆区。T[size]表示“由size个T类型元素组成的数组”。
2025-05-12 15:29:44
569
原创 二、Making & Using Objects
项目含义声明 declaration告诉compiler“这个名字存在”定义 definition给这个名字“分配空间/代码”一个名字可以声明多次,但定义只能一次。//只是声明,没有分配空间int i = 0;//定义//声明//声明//声明int func1(int length,int width){}//定义int i = 0;b = 1.2;i = 2;f(b);h(i);
2025-05-12 15:19:36
777
原创 十一、引用与拷贝函数(References & the Copy-Constructor)
引用() 通常用于函数参数列表和函数返回值,但你也可以创建一个独立存在的引用。引用在创建时必须被初始化(指针可以先创建,然后再初始化)。一旦引用被初始化为指向某个对象,它就不能被更改为去引用另一个对象。(指针可以重新指向另一个对象)引用始终不能是NULL。必须始终能够假设引用连接到了一个合法的存储区域。示例int& m=a;int n = m;m = m + 5;
2025-04-28 21:41:28
1152
原创 十、名字控制(Name Control)
所谓的静态对象(静态元素)是指:在程序运行期间,存储在静态存储区(static storage area)生命周期贯穿整个程序的对象。类型示例说明全局变量int x = 5;存在于整个程序静态局部变量函数内部static,记住上次值类的静态成员变量属于整个类namespace作用域的静态对象同样是静态存储静态类对象构造一次,用到最后关键字static对象被创建在一个特殊的静态数据区(static data area),而不是每次函数调用时创建的**栈(stack)**上,
2025-04-28 14:33:00
847
原创 九、内联函数(Inline Functions)
当一个函数代码只有几行,但会被频繁调用时,我们可以使用inline来节省时间并提高效率。内联函数是一个真正的函数,它在调用处被直接展开,就像预处理宏一样,因此可以消除函数调用的开销。内联函数 = 真正的函数 + 具有宏替换的效率。因此,我们在写代码是,应该永远不要使用宏,而是使用内联函数。示例内联函数 = 结合了宏的效率和函数的安全性。类内定义的函数默认使inline大型工程中,最好将inline函数定义写在类外,保持接口整洁。
2025-04-26 14:48:24
584
原创 八、Constants(常量)
如果你是通过地址传递和返回const表示你承诺不会改变该地址所指向的内容。如果你是通过值传递对象, 指定cosnt对于调用者来说是没有意义的。如果你是以const方式按值返回一个类对象,这意味着返回值不能作为左值使用(即不能被赋值或修改)。*cip = 2;t(ip);//okt(cip);//error:const不可变非constu(ip);//oku(cip);
2025-04-26 11:16:27
775
原创 七、函数重载与默认参数(Function Overloading & Default Arguments)
默认参数是在函数声明中给定的一个值,当你在调用函数时没有提供对应的参数值,编译器会自动填入这个默认值。就像函数重载一样,默认参数允许你在不同情况下使用相同的函数名和函数重载不同之处在于,是用默认参数时,是编译器在替你填补参数值,而不是你手动写出多个函数版本。函数重载:使用相同函数名,处理不同类型或数量参数。默认参数:简化函数调用,提升接口友好性。
2025-04-25 14:47:18
949
原创 六、初始化与清理(Initialization & cleanup)
在C++中,清理适合初始化一样重要的。析构函数(Destructor)可以用于对象销毁的清理操作。特点名字为~类名无参数,不可重载无返回值编译器在对象销毁时自动调用C++支持在作用域的任意位置定义变量。最佳实践尽可能靠近使用初定义变量定义时初始化这样做有助于提升安全性与代码可读性聚合初始化是C++中一种通过大括号{}一次性为所有成员赋值的方式。它专门用于“简单的结构体或类”,也就是所谓的“聚合类型”,但也不限于聚合类型。构造函数(初始化对象)析构函数(销毁时清理资源)
2025-04-24 16:56:23
897
原创 五、实现隐藏(Hiding the Implementation)
友元函数是一种有特权的函数。允许外部函数(友元函数)或类(友元类)访问本类的私有成员。一个普通的public该函数可以访问类对象的私有部分。该函数属于类的作用域中。(这个函数是在类的”命名空间里面“定义的,它是类的一部分)该函数必须通过对象调用(拥有一个this指针)。一个成员函数仅具有前两个特性。一个friend函数仅具有第一个特性。使用作用域解析符。month = m;day = d;
2025-04-23 19:39:00
958
原创 四、数据抽象(Data Abstraction)
C++类与结构体的区别:类与结构体相似,唯一的区别在于类默认是private,而结构体默认是public。在C++中,类是面向对象编程(OOP)的基础概念。在C++中,对象就是一快有唯一标识或内存地址的存储区域。那些仅仅把函数打包进数据结构的语言是面向对象的基础语言(object-based),而不是真正面向对象的语言(object-oriented)。封装(encapsulation):将数据和相关的操作包装成一个新的数据类型,称为抽象数据类型(ADT)。Stash。
2025-04-23 08:56:44
916
原创 三、The C in C++
int i,j;delet p;由此可见f()的地址在代码段/文本段,属于静态分配dog,cat,bird,全局变量地址,地址相邻,分配在静态区(BSS段)i、j, 局部变量,地址较低,且和全局变量区分明显,属于栈区,且高地址向低地址增长&p , 局部变量int * p本身的地址,也是栈区&(_p) , 动态分配的int 类型变量地址(通过*_new int),属于堆区。T[size]表示“由size个T类型元素组成的数组”。
2025-04-15 20:35:35
1098
原创 二、Making & Using Objects
项目含义声明 declaration告诉compiler“这个名字存在”定义 definition给这个名字“分配空间/代码”一个名字可以声明多次,但定义只能一次。//只是声明,没有分配空间int i = 0;//定义//声明//声明//声明int func1(int length,int width){}//定义int i = 0;b = 1.2;i = 2;f(b);h(i);
2025-04-14 11:56:28
952
原创 JAVA-平台模块系统原理
早期的JDK中,由于存在着JAR包边界“擦除” 现象,所以,虽然事实上JAR包之间有着依赖关系,但当程序运行之后JVM无法建立与维护JAR包之间的这种依赖关系,最终把所有JAR包中的类型在一起,变成一个“大泥球( big ball of mud)”。在大多数开发场景下,“平台模块”是“透明的”,不管你开发的是不是模块化应用,只要使用的是 JDK9以上版本JDK都是模块化的,但开发者感受不到它与以前的JDK有什么不一样的地方,因为模块化的JDK经过了仔细的设计,拥有良好的兼容性。
2024-12-04 19:50:21
2431
原创 JAVA-初始JAVA模块化开发
模块的名字本模块依赖于其他哪些模块的哪些包本模块导出了哪些包和服务本模块是否允许外界使用反射,读取特定包中的类型。
2024-12-04 18:38:11
1602
1
原创 JAVA-Optional型
由于Stream API 中经常需要“级联”多个操作,因此,如果中间某个操作遇到 null 引用时,如何处理它是个麻烦事。默认情况下,如果针对null 引用调用某个类的实例方法, JVM 会抛出NullPointerException ,如果不做妥善处理 ,这个异常可能 会“打断”流处理管线。为了解决这个问题,Java 8 专门 引入了一个 Optional 类。Optional对象是一个“可能为 null的对象。
2024-11-29 19:08:10
791
原创 JAVA-流中数据的过滤和查找
它会从头开始,丢弃所有表达式结果为 true 的元素。一旦遭遇谓词计算的结果为 false ,它就停止处理,并返回所有剩余的元素。它会在遭遇第一个不符合要求的元素时停止处理。使用Stream API 提供的allMatch 和 noneMatch 方法,检查集合中的元素是否满足或不满足特定的条件。可以使用Stream API 所提供的 findAny 和 findFirst 函数查找符合条件的单个元素。anyMatch方法可以回答“流 中 是否至少有 一个元素能匹配给定的条件”。采用filter()
2024-11-29 14:00:06
510
原创 JAVA-Stream API编程基础
Stream API中定义了诸多的操作,能完成各种常见的数据处理工作。了解并熟悉这些基本操作,需要花费一些时间,有些操作理解起来还会比较费劲,但这个时间是必须要花的,否则,你很难在开发中用好它们。在后面的内容中,我们将通过大量的示例代码,展示这些流处理操作函数的基本使用方法。强调一下:掌握这些基本操作,要求扎实掌握Java 8 的 Lambda表达式特性,并且熟悉 JDK 中相关的函数式接口。
2024-11-29 12:05:32
775
原创 JAVA-流的创建
为了支持级联调用,所有流的“中间操作”都会返回一个流对象。但我们总需有一个“初始”的流对象,以便基于它开始构建一个流处理管线。下面介绍如何从原始数据源中创建这个“初始”的流对象。
2024-11-29 09:54:30
847
原创 JAVA-Stream API的特性
Stream API中的“ Stream (流)”,可以看成是一组数据的集合 ,我们可以对它施加一系列的数据操作,这些操作可以是顺序进行的,也可以是并行执行的。Stream看上去是集合,但实际上不是集合,为什么呢?
2024-11-28 17:25:05
885
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人