c++实验之虚拟函数的使用
- 格式:doc
- 大小:41.50 KB
- 文档页数:5
信号与系统虚拟实验教学系统实验指导书(OWVLab SSS)北京邮电大学北京润尼尔网络科技有限公司实验一 零输入、零状态及完全响应一、实验目的1、 掌握电路的零输入响应;2、 掌握电路的零状态响应;3、 学会电路的零状态响应与零输入响应的观察方法;二、实验仪器1、双踪示波器一台。
2、电阻R=100k ,R=51k ,R=10k 。
3、电容C=0.1uF 。
三、实验内容1、观察零输入响应的过程。
2、观察零状态响应的过程。
四、实验原理1、零输入、零状态和完全响应: 零输入响应:没有外加激励的作用,只有起始状态(起始时刻系统储能)所产生的响应。
零状态响应:不考虑起始时刻系统储能的作用(起始状态等于零)。
2、典型电路分析:电路的响应一般可分解为零输入响应和零状态响应。
首先考察一个实例:在下图中由RC 组成一电路,电容两端有起始电压Vc(0-),激励源为e(t)。
图1 RC 电路则系统响应-电容两端电压:τττd e e RC Vc et Vc t t RC RCt)(1_)0()(_0)(1⎰---+=上式中第一项称之为零输入响应,与输入激励无关,零输入响应_)0(Vc e RCt -是以初始电压值开始,以指数规律进行衰减。
第二项与起始储能无关,只与输入激励有关,被称为零状态响应。
在不同的输入信号下,电路会表征出不同的响应。
五、实验模块说明“零输入响应与零状态响应”单元,它的电路组成如下图所示,在电路单元中,元件的值为:电阻R=100k,R=51k,R=10k,电容C=0.1uF。
图2 实验电路图六、实验步骤1、在实验台上搭建图2所示电路。
其中电阻R=51k、电容C=0.1uF。
2、系统的零输入响应特性观察:(1)打开“函数信号发生器”电源,选择波形为“方波”,调节方波频率为1Khz,幅度为5v的方波信号。
用导线将脉冲信号输出端与R1左端相连,用脉冲信号作同步,观察输出信号的波形。
(2)同上步,将信号产生模块中脉冲信号输入到R2、R3端口,用脉冲信号作同步,分别观察输出信号的波形。
十四.对象间关系模型的实现C++语言支持对象模型中的的包容与继承(派生)关系,但对关联关系没有专用的语法支持。
⒈包容关系①不透明包容例:#include<iostream.h>class A{int i;public:A(){i=0;}A(int x):i(x){}int operator!(){return i;}};class B{int j;A *p;public:B(int x):j(x){p=new A[x];}int operator!(){return j;}void operator~(){for(int i=0;i<j;i++)cout<<!p[i];}};void main(){B b(10);cout<<!b<<endl;~b;}②透明包容例:向对象单向链表中插入已有的对象#include<iostream.h>class A{int i;A *next;public:A(int x,A* s=NULL):i(x),next(s){}A* GetNext(){return next;}void SetNext(A* s){next=s;}int operator!(){return i;}};class B{int j;A *p;public:B(int x,A* s=NULL):j(x),p(s){}void Insert(A* s){if(!p)p=s;else{A* temp=p;while(temp->GetNext())temp=temp->GetNext();temp->SetNext(s);}}int operator!(){return j;}void operator~(){A* temp=p;while(temp){cout<<!(*temp)<<endl;temp=temp->GetNext();}}};void main(){A a1(0),a2(1),a3(2);B b(10,&a1);b.Insert(&a2);b.Insert(&a3);!a1;~b;cin.get();}③类模板当被包容的类的类型不确定时,可以用类模板来声明包容关系。
虚拟实验的设计与实现虚拟实验是网络课程的重要组成部分,也是开发与设计的难点。
本文在分析虚拟实验的特点、使用现状及虚拟实验系统构成的基础上,提出了利用仿真软件设计开发综合性、设计性虚拟实验的方案。
采用该方案,具有灵活性、鲁棒性、动态匹配性好、共享方便等特点,便于实验的灵活变更与快速实施。
以数字电路课程为例,给出了设计中的关键技术和相关实现结果。
标签:虚拟实验;网络课程;数字电路;远程教学实验教学作为高等学校教学体系的重要组成部分,对培养学生的创新意识、动手能力、分析问题和解决问题能力有着不可替代的作用。
为满足培养具有高素质、创新能力的人才要求,实验教学在不断地进行着改革,实验教学内容向综合型、设计型转变,由此各种教学媒体被引进到实验教学中来,特别是虚拟实验,对传统实验教学产生了越来越大的影响。
在网络课程的实验中,学生可根据自己的实际情况确定实验内容、安排实验进度,学生自主学习的空间不断扩大,主体地位明显提高,从而满足了社会群体协同学习和个体独立性学习的需要。
但这种新型的实验教学模式的充分实现,必须依托质优量足的虚拟实验作为条件支撑,而目前虚拟实验的开发设计还存在着一些问题。
如何才能设计开发出内容科学、实时和交互功能强、参数变更灵活的虚拟实验,是当前虚拟实验教学中亟待解决的一个问题。
一虚拟实验的特点及设计现状虚拟实验的教学,既有与网络课程的教学特点共通之处,如时空的疏离性、资源的共享性、活动实施的机动性、学习行为的自主性等,又有其自身的特点。
虚拟实验过去一直被称作思想实验(thought experiment),那是因为过去受客观条件所限,这样的实验只能在人的头脑中进行。
现在一般认为,虚拟实验是以科学实验为基础,以逻辑推理为根据,以计算机及网络技术为支撑,所实现的揭示客观过程或现象的本质联系和规律的一种科学认识方法[6]。
以数字电路实验为例,说明虚拟实验与传统实验的区别。
传统的数字电路实验室使用的实体实验仪器一般由3个功能模块组成:信号的采集与控制模块、信号的分析与处理模块、结果的表达与输出模块。
Virtual是C++ 机制中很重要的一个关键字。
只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在 Base 的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。
当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。
这是面向对象中的多态性的体现。
(关于虚拟机制是如何实现的,参见Inside the C++ Object Model ,Addison Wesley 1996)//---------------------------------------------------------·class Base{public:Base(){}public:virtual void print(){cout<<"Base";}};class Derived:public Base{public:Derived(){}public:void print(){cout<<"Derived";}};int main(){Base *point=new Derived();point->print();}//---------------------------------------------------------Output:Derived//---------------------------------------------------------这也许会使人联想到函数的重载,但稍加对比就会发现两者是完全不同的:(1)重载的几个函数必须在同一个类中;覆盖的函数必须在有继承关系的不同的类中(2)覆盖的几个函数必须函数名、参数、返回值都相同;重载的函数必须函数名相同,参数不同。
《虚拟仪器技术》实验报告书姓名:学号:班级实验(1-1)使用For循环目的:1.了解虚拟仪器的编程过程,熟悉前面板和流程图的界面环境;2.了解工具模板、控制模板和函数模板的使用;3.掌握For循环及其移位寄存器使用方法。
内容:用For循环和移位寄存器计算正整数的阶乘。
图1-1 实验1-1的面板和流程图实验(1-2)用While循环设计平均数滤波器目的:1.了解虚拟仪器的编程过程,熟悉前面板和流程图的界面环境;2.了解工具模板、控制模板和函数模板的使用;3.掌握While循环及其移位寄存器使用方法。
内容:利用While循环及其移位寄存器进行数据滤波。
在While循环框架中产生一个随机数,然后将这个随机数与前三次循环所产生的随机数求平均值,最后将平均值送到前面板上显示。
利用移位寄存器可得到前三次循环产生的随机数。
步骤:1.在前面板上创建各个控件如图。
图1-2 实验1-2的前面板2.用工具模板中的文字编辑控件将图形纵坐标的范围改为从0到1。
3.创建流程图如下:图1-3 实验1-2的流程图4.在流程图中添加While循环并创建移位寄存器。
a)右键单击While循环的左边或右边边框,在弹出的菜单中选择Add Shift Register。
b)右键单击While循环的左边框,在弹出的菜单中选择“添加元素”,重复一次,又添加了两个寄存器元素,共计3个寄存器元素。
算术与比较-Express数值-复合运算(+),增加输入,右键弹击并在弹出的菜单中选择“增加输入”至4输入,从而得到注意VI用随机数对寄存器进行初始化,如果不对寄存器的终值进行初始化,它包含的是默认值或前面运行的结果值,所以最初的几个平均值没意义。
5.运行该VI观察结果。
6.保存VI为Random A verage.vi,路径LabVIEW\Activity。
实验(1-3)顺序结构的使用目的:了解和掌握顺序结构的使用方法内容:用FOR循环产生长度为2000的随机波形,并计算所用时间。
填充内存的命令一、概述内存是计算机中非常重要的组成部分,它直接影响着计算机的性能和运行效果。
在某些情况下,我们需要填充内存以进行一些测试或者实验,而填充内存的命令可以帮助我们快速地完成这个任务。
本文将介绍几个常用的填充内存的命令,并对其使用方法进行详细讲解。
二、memset命令memset命令是C/C++语言中的一个库函数,用于将一段内存空间的值设置为指定的字符。
在填充内存的过程中,我们可以利用memset 命令来将内存中的值设定为我们所需的值。
下面是memset命令的使用示例:```c#include <stdio.h>#include <string.h>int main() {char buffer[1024];memset(buffer, 'A', sizeof(buffer));return 0;}在上述示例中,我们创建了一个大小为1024字节的字符数组buffer,并使用memset命令将其填充为'A'字符。
通过这个命令,我们可以快速填充内存,用于测试或者其他需要大量内存的场景。
三、dd命令dd命令是一个在UNIX和类UNIX系统中常用的命令,用于执行低级复制操作。
除了复制文件之外,dd命令还可以用来填充内存。
下面是dd命令的使用示例:```shelldd if=/dev/zero of=memfile bs=1M count=1024```在上述示例中,我们使用dd命令将/dev/zero设备中的数据复制到memfile文件中,复制的数据块大小为1M,复制的数据块数量为1024。
通过这个命令,我们可以将大量的零填充到内存中,以达到填充内存的目的。
四、memtester命令memtester命令是一个用于测试内存的工具,它可以模拟内存使用情况,检测内存中的错误。
在memtester命令中,我们可以通过指定填充模式来填充内存。
下面是memtester命令的使用示例:```shellmemtester 1G在上述示例中,我们使用memtester命令对1G的内存进行测试。
CDerived 类的CDialog 类对象创建后便可根据用户的要求销毁。
如果开发者已在类代码中对该问题进行了探讨,那么就需要在 C++ 对象销毁时调用虚拟析构函数。
然而,在 VC++ 的 MFC 库中,CDialog类并没有实现虚拟析构函数。
为了规避这一问题,我们通常需要手动添加 OnDestroy 函数。
下面我们就来探讨如何实现这一功能。
步骤:1. 我们需要在派生类的头文件中声明虚拟析构函数。
由于 VC++ 的MFC 库中 CDialog 类并未提供虚拟析构函数,所以我们需要手动添加。
```c++class CDerived : public CDialog{public:virtual ~CDerived();};```2. 接下来,在派生类的源文件中实现虚拟析构函数。
重新定义CDerived 的析构函数,并在其中首先调用基类的析构函数,再添加我们需要的销毁操作。
```c++CDerived::~CDerived(){// 添加自定义的销毁操作// ...// 最后调用基类的析构函数CDialog::OnDestroy();}```3. 完成这些步骤之后,派生类 CDerived 的对象销毁时就会先执行自定义的销毁操作,然后再调用 CDialog 类的 OnDestroy 函数。
这样就实现了虚拟析构函数的功能。
4. 值得注意的是,如果 CDerived 类只是作为基类使用,而并不打算创建 CDerived 类的对象,那么实际使用中不必添加虚拟析构函数和自定义的销毁操作。
总结:通过手动添加虚拟析构函数和自定义的销毁操作,我们可以在销毁对象时实现对特定操作的控制。
这种方法在VC++ 的MFC 库中很常见,因为部分类并未提供虚拟析构函数。
在实际开发中,需要根据具体情况来决定是否需要手动添加虚拟析构函数,并在其中执行自定义的销毁操作。
经过以上步骤,我们成功实现了在派生类中添加虚拟析构函数和自定义的销毁操作。
实验一:系统调用目的:深入理解操作系统是虚拟机实验方法:利用UNIX/LINUX所提供的系统调用来编写C语言程序,程序中要体现出一些典型的系统调用(函数)。
任务:编写一个C语言程序,该程序将一个存放了一系列整数的文本文件进行排序,每个整数占据文件的一行,排序的结果存放到一个新的文件之中。
源文件和目标文件的文件名字由命令行输入。
例如:假设可执行文件的文件名是sort,源文件与目标文件的名字分别是data 和newdata,那么命令行的情形为如下所示内容:./sort data newdata1、命令行参数的传递。
根据C语言编程规范的要求,传递命令行参数通过main函数进行。
main函数的原型是:main(int argc, char **args),其中argc是一个整数,表示命令行中参数的个数,第二个参数是字符串指针数组,这个数组中的第0个元素存放可执行文件名称,其余为参数,用args[1], args[2]... ...访问。
以上述命令行为例,argc为3,args[0]为“./sort”,args[1]为“data”,args[2]为“newdata”2、系统调用的使用(1)打开文件系统调用open在读写一个文件之前,必须打开这个文件,打开文件的过程主要是将文件的控制结构(LINUX中是i节点)调入内存。
本实验中用如下语句打开文件:fd = open(args[1], O_RDONL Y);第一个参数是打开的文件名,第二个参数O_RDONL Y表示只读,O_WRONL Y表示只写,O_RDWR表示读写,O_CREAT表示创建文件。
open系统调用返回一个整数作为文件描述符,以后用这个文件描述符来访问文件,如果因为某种原因(文件不存在,不符合访问权限,存储空间不足等)致使文件无法打开,则open返回-1。
(2)文件信息读取系统调用read本实验使用如下语句读取文件信息read(fd, &ch, 1)fd是open返回的文件描述符,ch为字符变量,1表示从文件中读取一个字节。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。