- 博客(50)
- 收藏
- 关注
原创 六、继承(三)
之前我们说过,初始化列表初始化的顺序跟出现的顺序无关,而跟声明的顺序有关,也就是说谁先声明谁先初始化,而对于继承也有类似的特性,谁先被继承谁就先声明。,此时数据冗余的影响并不大,而当继承的成员有很多时,通过存放一个指向虚基表的指针再通过偏移量来得到公有的对象就可以极大地节省空间了。实际上,这个地方空下来是为多态做准备,这里我们暂且不表,我们现在需要知道的是,这里不只是用来存偏移量,还会用来存别的数据。为了解决菱形继承的二义性和数据冗余的问题,C++又引入了虚拟继承的概念,而要使用虚拟继承,就要用到关键字。
2025-04-13 11:44:47
673
9
原创 六、继承(二)
的地址都是一样的,而且不管是基类还是派生类都可以对它进行访问,也就是说当基类定义了。如果要让基类友元访问派生类的私有和保护成员,需要在派生类中也进行声明。这样一来,就可以实现一个不能被继承同时又不影响创建自己对象的类了。如果一个基类中有存在静态成员,那么在派生类中是怎么继承的呢?类的对象时,也将调用不到它的构造和析构函数,那该怎么办呢?,也就是说基类友元不能访问派生类的私有和保护成员。从运行结果可以看到,不管是基类还是派生类,静态成员。如果我们想实现一个不能被继承的类,该怎么做呢?从运行结果可以看到,
2025-04-09 15:45:44
437
8
原创 【上海大学计算机组成原理实验报告】七、程序转移机制
学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。
2024-06-10 19:56:56
1824
49
原创 【上海大学计算机组成原理实验报告】六、内存系统实验
学习内存访问机制//理解代码和数据的分区存放原理和技术//手动方式把立即数`33H`写入内存`D1H`单元//手动方式把`D1H`单元的内容读出,再送入`ST`单元//在`CP226`汇编语言程序集成开发环境下编写程序//既然有`ORG`微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?//上海大学计算机组成原理实验//内存系统实验
2024-06-01 22:24:10
2531
63
原创 【上海大学计算机组成原理实验报告】五、机器语言程序实验
机器语言程序实验//理解计算机执行程序的实际过程//学习编制机器语言简单程序的方法//将R1中的数值左移n次送OUT,其中n是R2中的数值。(指令码从10开始)//完成R3=R0×R1,结果送OUT。(指令码从30开始)//建立“中文汇编指令”需要哪些条件?//上海大学计算机组成原理实验报告
2024-05-15 20:54:10
1822
47
原创 【上海大学计算机组成原理实验报告】四、指令系统实验
分析并验证指令功能//观察机器指令码为`66H`的各微指令信号,验证该指令的功能。假设`A=03H`,`R2=77H`,`77`地址单元存放`06H`数据。//设计指令,完成相应功能//修改机器指令码为`E8H`的功能,使其完成“输出`A+W`的结果右移一位的值送OUT输出”操作//在微指令结构的计算机中,一条指令从启动到产生功能经过哪些环节?//了解指令结构、PC寄存器的功能和指令系统的基本工作原理。
2024-04-24 21:19:48
2222
66
原创 【上海大学计算机组成原理实验报告】三、微指令系统实验
微指令系统实验//了解译码器、微指令结构的基本工作原理//学习设计微指令的方法//分析指令功能,并自行编制一条指令//观察微指令存储器地址为31H单元的内容,分析其控制功能,并编制一条微指令实现“A非”运算后右移一位的值送OUT,把这条微指令放入微程序存储器的32H单元,将31H和32H连续执行以验证其功能是否实现//如何给μPC置初值?
2024-04-11 15:36:59
1960
60
原创 【上海大学计算机组成原理实验报告】二、运算器实验
运算器实验//算术、逻辑运算单元的控制方法//机器语言程序的运行过程//人工译码//CP226实验仪//计算07H+6AH后左移一位的值送OUT输出//把39H取反后同64H相或的值送入R2寄存器//如何将R2中的数据送至A寄存器中?
2024-04-01 20:00:12
2521
56
原创 【上海大学计算机组成原理实验报告】一、数据传送实验
将58H写入A寄存器//将6BH写入W寄存器//将C3H写入R1寄存器//将C3H写入R1寄存器//了解实验仪器数据总线的控制方式//掌握数据传送的基本原理//掌握各寄存器的结构、工作原理及其控制方法//数据传送实验
2024-03-15 17:04:07
3043
65
原创 【C++】102.二叉树的层序遍历
只用一个队列实现二叉树的层序遍历//当前层的节点全部出队列的时候一定是下一层的节点全部进入队列//vector levelOrder(TreeNode* root)//给你二叉树的根节点 root,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)//只需要再增加一个变量`levelSize`,用来记录每一层的数据个数,然后再让这个队列一层一层的出去
2024-03-06 22:00:48
1407
57
原创 六、继承(一)
继承的引入//继承的概念及定义//继承的定义格式//继承关系和访问限定符//继承基类成员访问方式的变化//基类和派生类对象赋值转换//基类和派生类对象赋值转换引入//基类和派生类对象赋值转换的规则//继承中的作用域//派生类的默认成员函数
2024-03-04 10:53:53
1033
54
原创 五、模 板
泛型编程//函数模板//函数模板的定义//函数模板的原理//函数模板的实例化//隐式实例化//显式实例化//函数模板的特征//类模板//类模板的定义//类模板的特征//非类型模板参数//模板的特化//函数模板特化//类模板特化//全特化//偏特化//部分特化//参数更进一步的限制//类模板特化应用示例//模板的分离编译//总结
2024-01-20 10:20:37
1332
72
原创 四、C++内存管理
C/C++内存分布//C++动态内存管理//new和delete//new、delete和malloc、free的区别//new和delete的底层原理//new和delete需匹配使用的原因//定位new表达式
2024-01-12 11:18:37
1680
56
原创 二、类与对象(四)
内部类的概念//内部类的特性//匿名对象的引入及特性//编译器对拷贝对象时的一些优化//连续构造和拷贝构造时的优化//参数类型为引用时的优化//传值返回时的优化
2024-01-06 14:05:03
1628
62
原创 二、类与对象(三)
初始化列表//初始化列表的引入//初始化列表的特性//explicit关键字//static成员//友元//友元函数的特性//static成员的特性
2023-12-29 10:54:06
1620
60
原创 【上海大学数字逻辑实验报告】七、中规模元件及综合设计
中规模元件及综合设计//掌握中规模时序元件的测试//在Quartus II上设计序列发生器//用74LS161芯片构造模10计数器//在Quartus II设计一个二进制序列01100111发生器//上海大学数字逻辑实验报告
2023-12-17 16:22:36
7057
63
原创 【上海大学数字逻辑实验报告】六、时序电路
上海大学数字逻辑实验报告//时序电路//掌握同步二进制计数器和移位寄存器的原理//用分立元件构成2位同步二进制加计数器//在Quartus II上设计单向移位寄存器//在Quartus II上设计环形计数器//构成3位同步二进制加(减)计数器//用74LS74构成双向移位寄存器
2023-12-12 23:05:50
7520
43
原创 【上海大学数字逻辑实验报告】五、记忆元件测试
上海大学数字逻辑实验报告//记忆元件测试//R-S触发器//D触发器//JK触发器//74LS00芯片构成钟控RS触发器//74LS112实现D触发器//在Quartus II上用D触发器实现JK触发器//用D触发器实现RS触发器的功能//用D触发器实现T触发器的功能//用JK触发器实现D触发器的功能//用JK触发器实现RS触发器的功能//用JK触发器实现T触发器的功能
2023-12-09 11:28:58
8891
52
原创 【上海大学《面向对象程序设计A》课程小项目报告】抽象向量类模板及其派生类
上海大学《面向对象程序设计A》课程小项目报告//抽象向量类模板//派生向量类//派生字符串类//测试及异常处理//联合测试
2023-12-05 18:20:57
1242
46
原创 【上海大学数字逻辑实验报告】四、组合电路(三)
多路选择器74LS151//译码器74LS138//在Quartus II上使用多路选择74LS151设计电路//在Quartus II上使用译码器74LS138设计电路//用最小项表达逻辑函数
2023-12-05 09:11:08
15544
40
原创 【上海大学数字逻辑实验报告】三、组合电路(二)
掌握8421码到余3码的转换//掌握2421码到格雷码的转换//使用Quartus II设计8421码到余3码的转换电路逻辑图//使用Quartus II设计2421码到格雷码的转换电路逻辑图//设计2421码到Gray码的转换电路//设计8421码到余3码的转换电路
2023-12-02 17:29:04
5155
46
原创 【上海大学数字逻辑实验报告】二、组合电路(一)
半加器和全加器的逻辑测试//异或门逻辑功能测试//使用分立元件的异或门和与非门分别构成半加器和全加器,并进行测试//使用Quartus II设计二位全加器//74LS00、74LS86
2023-11-29 22:57:45
4084
47
原创 二、类与对象(二)
this指针//C语言和C++实现Stack的对比//类的默认成员函数//构造函数//析构函数//拷贝构造函数//赋值运算符重载//const成员函数//取地址及const取地址操作符重载
2023-11-22 21:37:13
911
42
原创 二、类与对象(一)
面向过程和面向对象初步认识//类的引入//类的定义//类的定义方式//类的成员变量命名规则的建议//类的访问限定符及封装//public、protected、private//封装//类的作用域//类的实例化//类的大小
2023-11-01 22:28:14
457
53
原创 一、C++入门
C++关键字//命名空间//命名空间的定义//部分展开//全局展开//C++输入&输出//缺省参数//函数重载//引用//常引用//传值返回和引用返回的效率比较//引用和指针的区别//内联函数//auto关键字//基于范围的for循环
2023-10-23 21:14:14
561
41
原创 【C++】415.字符串相加
字符串相加:给定两个字符串形式的非负整数num1和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger),也不能直接将输入的字符串转换为整数形式。
2023-10-18 22:16:42
2844
43
原创 二十二、通讯录实现
通讯录基本功能//通讯录结构设计//通讯录具体功能及代码实现//初始化通讯录函数//增加联系人函数//显示所有联系人信息函数//查找指定联系人函数//删除联系人函数//修改指定联系人函数//通讯录的结构优化//初始化通讯录函数的优化//增加联系人函数的优化//释放通讯录空间函数
2023-10-16 21:54:29
667
41
原创 二十一、动态内存管理
动态内存开辟//动态内存函数//malloc//free//calloc//realloc//内存泄漏的概念//内存泄漏的分类//常见的动态内存错误//对NULL指针进行解引用//对动态开辟的空间越界访问//对非动态开辟的空间使用free释放//使用free释放动态开辟空间的一部分//对同一块动态内存多次释放//动态开辟内存忘记释放(内存泄漏)//C/C++程序的内存开辟//柔性数组
2023-10-13 13:08:10
378
39
原创 二十、自定义类型:枚举和联合
枚举类型的声明//枚举类型的优点//枚举类型的使用//联合体类型的声明//联合体类型的特点//联合体大小的计算//联合体类型的应用
2023-10-11 16:28:14
232
28
原创 十九、自定义类型:结构体
结构的声明//特殊的声明//结构体变量的创建和初始化//结构体内存对齐//对齐规则//offsetof宏//内存对齐的原因//修改默认对齐数//结构体传参//位段的定义//位段的内存分配//位段无法跨平台的原因//位段的应用//使用位段的注意事项
2023-10-09 20:37:27
216
31
原创 十八、数据在内存中的存储
整数在内存中的存储//大小端字节序和字节序判断//大小端的成因//浮点数在内存中的存储//浮点数的存储过程//浮点数的读取过程
2023-10-07 12:25:26
175
31
原创 十七、C语言内存函数
memcpy函数的使用和模拟实现//memmove函数的使用和模拟实现//memset函数的使用//memcmp函数的使用
2023-10-04 23:16:05
807
22
原创 十六、字符函数和字符串函数
字符分类函数//字符转换函数//strlen的使用和模拟实现//strcpy的使用和模拟实现//strcat的使用和模拟实现//strcmp的使用和模拟实现//strncpy的使用//strncat函数的使用//strncmp函数的使用//strtok函数的使用//strstr函数的使用和模拟实现//strerror函数的使用
2023-09-29 09:23:22
189
24
原创 十五、数组和指针笔试题解析
就是跳过一行也就是第二行的地址,对第二行的地址进行解引用实际上就相当于拿到了第二行的数组名,也就是说。由于两边的类型是一样的,所以这里进行强制类型转换是没有意义的,只是起到干扰的作用,是第一行的数组名,而数组名又是首元素的地址,所以就相当于把第一个元素也就是。表示的就是第二个元素的地址,对地址进行解引用,所以第一个输出的值为2.的形式打印,输出的结果就是从第四个字母开始的字符串,也就是。的形式打印,输出的结果就是从第四个字母开始的字符串,也就是。类型的指针数组中时,存放的实际上是首字符的地址,所以数组。
2023-09-27 16:29:04
167
20
原创 十四、指针(三)
上述代码中,其实是一次函数声明,声明的 signal 函数有2个参数,第一个参数是 int 类型,第二个参数是函数指针类型,该函数指针指向的函数参数是 int 类型,返回类型是 void,signal 的返回类型也是一个函数指针,该函数指针指向的函数参数是 int,返回类型是void。不过转移表也有自己的局限性,由于转移表的实现依赖于函数指针数组,而放在这个数组的元素的类型必须是相同的,也就是说放在函数指针数组中的函数的参数和返回类型必须是一样的。那么二维数组的首元素就是第一行,是一个一维数组。
2023-09-25 18:31:54
135
14
原创 十三、指针(二)
从调试结果可以发现, a 和 b 创建在 main 函数的内部,a 的地址是 0x005efbfc ,b 的地址是 0x005efbf0 ,在调用 Swap1 函数时,函数在内部创建了形参 x 和 y 接收 a 和 b 的值,但是 x 的地址是 0x005efb18 ,y 的地址是 0x005efb1c。上述代码虽然能够正常运行,但是test函数返回的是局部变量n的地址,当test执行完毕的时候变量n的空间就被释放了,此时如果把n的地址传给p,后续再通过p赋值的时候就会造成非法访问。
2023-09-22 08:45:50
130
6
原创 十一、操作符详解
16进制的每一位数字都是0~9、A~F,各自写成2进制,最多有4个2进制位就足够了,所以2进制转16进制时,从2进制序列中右边低位开始向左每4个2进制位就换算成一个16进制位,剩余不够4个2进制位的直接换算。8进制的每一位数字都是0~7,而数字0~7各自写成2进制最多有3个2进制位就足够了,所以2进制转8进制时,从2进制序列中右边低位开始向左每3个2进制位就换算成一个8进制位,剩余不够3个2进制位的直接换算。逗号表达式中的表达式从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
2023-08-13 22:18:23
121
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人