- 博客(24)
- 收藏
- 关注
原创 【C++学习笔记 21】C++中的动态数组 vertor
首先来创建一个静态数组如此创建的数组为静态的,其特点是数组的长度已知,其本质是一串连续的内存空间,无法随意的修改它的大小。
2024-10-01 16:23:54
448
原创 【C++学习笔记 20】C++中的智能指针
在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。智能指针实际上就是对原始指针的包装。
2024-09-08 22:08:42
734
原创 【C++学习笔记 19】C++中的对象生存周期
在C++中,我们每次进入一个作用域时,我们就是在push栈帧。就像把书堆叠起来,将最新的书放在最上层,在这个作用域上创建变量就像在书中写内容,当作用域结束的时候,就把书拿走,此时每个基于栈的变量就结束了。
2024-09-04 23:10:10
583
原创 【CS106B】作业3 Assignment 3. Recursion!
有两种选择:您可以给员工轮班,或者不给员工轮班。这两种选择中的一种会比另一种更好,或者它们将与产生的价值挂钩。在尝试之前,您不会知道哪一种更好,因此(递归地)探索这两种选项并报告哪一种能带来更多价值。一个启发是,应该避免用循环的思维写递归,重点是每一次的判断与操作,寻找目标,而非搜寻所有可能性。
2024-08-17 16:13:44
404
原创 【C++学习笔记 18】C++中的隐式构造函数
定义一个类,并写两个简单的构造函数,在主函数中可以用上述方法创建两个实例,也可以用下面的方法创建这里直接让字符串和整形的数字等于类,却可以创建成功,这就是隐式转换或隐式构造函数。它隐式的把"InfiHeart"或22转化为Entity对象,因为其中包含接受字符串或整数的构造函数。另一个例子是如果定义一个传入Entity对象的函数,可以直接调用函数并传入整形参数。但如果使用则会报错,原因是隐式转换只允许发生一次,这里的是char数组,距离创建Entity对象还需一次转换。
2024-08-15 22:09:56
1183
原创 【C++学习笔记 17】如何创建对象
在C++中,我们可以选择在哪里创建对象,在栈上或者在堆上。区别在于,栈存在一个自动的生存周期,由它声明的地方的作用域决定。当这个作用域结束时,栈会弹出,作用域内的所有东西都会被释放。而在堆上创建对象则不同,它会一直存在,直到给出释放的指令。
2024-08-13 23:21:55
383
原创 【C++学习笔记 16】构造函数初始化列表
另外,两种写法的一大区别是,直接构造函数赋值可能造成性能浪费。原因是在成员声明时的代码运行过程,也创建了变量,直接构造函数赋值相当于创建了两次变量,并用后者覆盖前者。而使用初始化列表可以避免这种行为。当然,并非所有情况都是如此,对于整形这种基本类型,他不会被初始化直到显式赋值。需要注意的是,这样写需要保持初始化变量的顺序与成员变量的声明顺序一致.当编写类并向其中添加成员时,通常需要某种方式对这些成员进行初始化。常见的方法,如写一个构造函数赋初值。另一种方式是使用构造函数初始化列表。
2024-08-11 16:27:12
420
原创 【C++学习笔记 15】C++中的const和mutable
const实际上更像一个假的关键字,因为它在代码中没有做什么,类似类和结构体的可见性,是一种针对开发人员写代码的强制规则。const基本上就是做出承诺,某些东西是不会改变的,这就意味着这个承诺并非强制。在函数中的使用方法比如在这个例子中,*a会报错,意味着不能直接改变内容,但是后一句的强制转换类型并将地址赋值并未报错,这就是绕过承诺的方法之一。则情况刚好相反,*a不会报错,后一句报错。当在两个内容前都加上const时,则均不可改变。在类中的使用方法以一个类为例,当在方法的后面写const。
2024-07-29 23:19:29
421
原创 【CS106B】作业2 Assignment 2. Fun with Collections
【代码】【CS106B】作业2 Assignment 2. Fun with Collections。
2024-07-15 23:16:59
454
原创 【C++学习笔记 12】C++中的可见性
可见性是面向对象中的概念,它是指一个类中的成员或方法是否可见,即谁能够访问,谁能够调用?可见性不会影响代码的性能,它仅在语言层面,只是用来辅助写出更好的代码。
2024-07-13 17:06:52
1059
原创 【C++学习笔记 11】C++中的接口(纯虚函数)
原理上来讲,纯虚函数允许我们定义一个在基类中没有实现的函数,然后强制在子类中去实现这个函数。如果在基类中的虚函数带有实际函数体,那么在子类中重写函数是可写可不写的,这时调用的就是基类中的函数体。然而,在有些场景中,提供默认的函数体没有意义,实际上的需求只是强制子类为某个特定的函数提供自己的定义。在面向对象的程序设计中,创建一个只包含未实现的方法然后让子类去实现实际功能的做法非常普遍,这一般被称为接口(interface),即一个只包含未实现的方法并作为一个模板的类。
2024-07-10 21:50:31
1424
原创 【CS106B】作业1 Assignment 1. Welcome to C++!
之前学的,后面中断了,先把中断前做的作业po一下吧,学完慢慢续上。
2024-07-07 13:42:00
524
原创 【C++学习笔记 9】C++中的继承
继承使类之间有了相互关联的层级关系,从最开始的父类中可以创建出很多的派生类,它可以帮助我们避免很多重复的代码。
2024-07-06 11:14:54
280
原创 【C++学习笔记 8】C++中的析构函数
构造函数一般用于创建实例或初始化,而析构(destructor)函数则是在销毁一个对象时使用的。析构函数可以用在释放任何内容或需要清理内存空间的场景。
2024-07-04 23:57:06
454
原创 【C++学习笔记 6】C++中的枚举
enum是enumeration的缩写,基本上就是一些值的集合,或者说是在给一些值的集合一个名称。这便于让我们设置一组数值,在给这些值命名之后,代码会变得更加易读。定义枚举的主要目的是增加程序的可读性,枚举值的本质就是一个整数。
2024-06-24 21:45:59
664
原创 【C++学习笔记 5】C++中的static
在class之外的static,意味着被修饰的符号在link阶段只在局部有效,它只对定义它的编译单元(.obj)可见。在class或struct中的static,这意味着这部分内存是这个类中的所有实例所共享的。
2024-06-17 22:44:12
722
原创 【C++学习笔记 4】C++中的类
试想一下,假如我要写一个游戏,玩家在其中移动假如存在多个玩家,那我只能多次定义玩家,并且多次引用同一个函数,这样的重复会导致很多难以维护的代码,因此,引入类的概念,通过面向对象编程来简化代码。
2024-06-16 17:59:11
434
原创 【C++学习笔记 3】指针
指针实际上就是一个整数,存储着一个内存地址。不必执着于用“类型”的概念区分,那只是为了方便设计出来的,所有的指针,本质上都是一个整数,存储着一个内存的地址。当在类型后加*时,意味着这个变量是个指针,当在变量前加&时,表示在问这个变量:“你的地址是啥?在定义指针变量这行打上断点,运行后发现指针变量的确存储一个数,在内存视图进入这个数表示地址,可以看到里面存储着8。当改变指针类型为int,可以发现做的事情并没有变。
2024-06-15 21:36:28
530
原创 【C++学习笔记 2】C++中的变量
在C++中,不同变量(variable)类型的唯一区别就是大小,即这个变量具体占用多少内存。比如int,整型占用4个byte, 这个标准由编译器决定。
2024-06-13 22:49:16
275
原创 【C++学习笔记 1】C++程序是怎样运行的
coding的过程,实际上编写的是只是一些文本,将其传入编译器后,它会被翻译成机器能够识别的二进制文件(binary),让机器听从指令运行。这段最基本的代码由引入头文件和主函数构成。被称为预处理指令(preprocess语句),以开头的都属于这类语句,对这类语句的编译发生于对主程序本身的编译,因此被称为预处理指令。其中如#include,将内容直接粘贴到这句代码所在的位置;#define,搜索并替换内容;#if #endif满足条件时才执行代码。
2024-06-12 21:31:22
510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人