南昌航空大学实验报告3析构函数
- 格式:doc
- 大小:157.50 KB
- 文档页数:13
太原工业学院计算机工程系return 0;}(3)使用带默认参数值的构造函数,不给定实参时,默认边长为1;注意——这个版本也只需要一个构造函数即可。
需要的测试函数是:int main(){Triangle Tri1; //定义边长为1 1 1的三角形类实例Tri1.showMessage();Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例Tri2.showMessage();Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例Tri3.showMessage();Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例Tri4.showMessage();return 0;}(4)在构造函数中使用参数初始化表对数据成员初始化。
这是一种更加提倡的写法。
测试函数同(1)。
【项目2-游戏中的角色类】(1)基于下面设计的游戏中角色类,补充完整需要的成员函数,使角色能一定的规则行动或改变状态。
下面代码中包含的是最基本的要求,可以根据你的设计进行扩充。
class Role{public:......private:string name;int blood;bool life;};int main(){Role mary;mary.setRole(“mary”,4);//设置角色的姓名为“mary”,血量为4mary.show();//显示mary.attack();//攻击别人,涨1个血mary.eat(2);//吃东西,涨2个血mary.beAttack();//被攻击,失1个血,血量为0死掉mary.beAttack();//被攻击,失1个血,血量为0死掉mary.show();//显示return 0;}(2)设计构造函数,使角色对象在创建时被初始化;设计析构函数,当角色对象被撤消时,提示一句“XXX(名称)退出江湖…”。
析构函数(C#)析构函数⼜称终结器,⽤于析构类的实例。
定义 析构函数(destructor) 与相反,当对象结束其时(例如对象所在的函数已调⽤完毕),系统⾃动执⾏析构函数。
析构函数往往⽤来做“清理善后” 的⼯作(例如在建⽴对象时⽤new开辟了⼀⽚内存空间,delete会⾃动调⽤析构函数后释放内存)。
析构函数简介以C++语⾔为例:[1]析构函数名也应与类名相同,只是在函数名前⾯加⼀个位取反符~,例如~stud( ),以区别于。
它不能带任何参数,也没有返回值(包括void类型)。
只能有⼀个析构函数,不能。
如果⽤户没有编写析构函数,会⾃动⽣成⼀个缺省的析构函数(即使⾃定义了析构函数,也总是会为我们合成⼀个析构函数,并且如果⾃定义了析构函数,编译器在执⾏时会先调⽤⾃定义的析构函数再调⽤合成的析构函数),它也不进⾏任何操作。
所以许多简单的类中没有⽤显式的析构函数。
析构函数的使⽤不能在结构中定义析构函数。
只能对类使⽤析构函数。
⼀个类只能有⼀个析构函数。
⽆法继承或重载析构函数。
⽆法调⽤析构函数。
它们是被⾃动调⽤的。
析构函数既没有修饰符,也没有参数。
声明:class Car{~ Car() // destructor{// cleanup statements...}} 该析构函数隐式地对对象的基类调⽤。
这样,前⾯的析构函数代码被隐式地转换为:protected override void Finalize(){try{// cleanup statements...}finally{base.Finalize();}} 这意味着对继承链中的所有实例递归地调⽤ Finalize ⽅法(从派⽣程度最⼤的到派⽣程度最⼩的)。
注意不应使⽤空析构函数。
如果类包含析构函数,Finalize队列中则会创建⼀个项。
调⽤析构函数时,将调⽤垃圾回收器来处理该队列。
如果析构函数为空,则只会导致不必要的性能丢失。
程序员⽆法控制何时调⽤析构函数,因为这是由垃圾回收器决定的。
南昌航空大学实验报告课程名称:微机原理实验名称:中断控制器8259A应用班级:100451 姓名:张冲学号:10045127教师评定:签名:一、实验目的:1、掌握中断控制器8259A与微机接口的原理和方法。
2、掌握中断控制器8259A的应用编程。
二、实验内容:本系统中已设计有一片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7对应的中断型号为8~F。
8259A和8088系统总线直接相连,8259A上连有一系统地址线A0,故8259A有两个端口地址,本系统中为60H、61H.60H用来写ICW1,61H用来写ICW2、ICW3、ICW4,初始化命令字写好后,再写操作命令字。
OCW2、OCW3用口地址60H,OCW1用口地址61H。
使用了3号中断源,IR3插孔和SP插孔相连,中断方式为边沿触发方式,每按一次AN按钮产生一次中断信号,向8259A发出中断请求信号。
如果中断源电平信号不符合规定要求则自动转到7号中断,显示"Err".CPU响应中断后,在中断服务中,对中断次数进行计数并显示,计满5次结束,显示器显示"Good".2、实验线路连接(1)8259模块上的INT连8088的INTR.(2)8259模块上的INTA连8088的INTA。
(3)MP区SP插孔和8259的3号中断IR3插孔相连,SP端初始为低电平。
(4)8259的D0~D7连到BUS2区的XD0~XD7.(5)8259模块上的CS端接Y6。
(6)8259模块上的A0连到BUS区的XA0。
(7)8259模块上的RD、WR信号线分别连到BUS区的XRD、XWR上。
三、实验步骤:运行实验程序:单机时,实验程序起始地址为F000:91A0。
在系统显示监控提示符“P."时:输入F000按F1键输入91A0按EXEC键在系统上显示"8259-1".按AN按钮,按满5次显示"Good".四、实验参考程序:CODE SEGMENT MOV AL,08HASSUME CS:CODE MOV DX,INTPORT2INTPORT1 EQU 0060H OUT DX,ALINTPORT2 EQU 0061H MOV AL,09HINTQ3 EQU INTREEUP3 OUT DX,ALINTQ7 EQU INTREEUP7 MOV AL,0F7HORG 11A0H OUT DX,ALSTART:CLD MOV BYTE PTR[0701H],01HCALL WBUF1 TIME=1WRITE INTRRUPT STIMOV AL,13H WATING:CALL DISPMOV DX,INTPORT1 DISP 8259-1OUT DX,AL JMP WA TINGMOV ES,AX WRINTVER:MOV AX,0HMOV DI,002CH OUT DX,ALLEA AX,INTQ3 STISTOSW IRETMOV AX,0000H INTREEUP7:CLISTOSW MOV AL,20HMOV AX,INTQ7 MOV DX,INTPORT1STOSW OUT DX,ALRET MOV DS:[077AH],1C1CHINTREEUP3:CLI MOV DS:[077CH],101BHMOV AL,DS:[0701H] MOV DS:[077EH],1010HCALL CONVERS INTRE3:CALL DISPMOV BX,077BH JMP INTRE3MOV AL,10H DISP:MOV DX,077FHMOV CX,05H MOV AH,20HINTRE0:MOV BYTE PTR[BX],AL DISP0:MOV CX,00FFHINC BX MOV BX,DXLOOP INTRE0 MOV BL,DS:[BX]MOV AL,20H MOV BH,0HMOV DX,INTPORT1 PUSH DXOUT DX,AL MOV DX,0FF22HADD BYTE PTR:[0701H],01H MOV AL,CS:[BX+127BH]CMP BYTE PTR:[0701H],06H OUT DX,ALJNA INTRE2 MOV DX,0FF21HMOV DS:[077AH],191AH MOV AL,AHMOV DS:[077CH],1819H OUT DX,ALMOV DS:[077EH],1010H DISP1:LOOP DISP1INTRE1:CALL DISP POP DXJMP INTRE1 DEC DXCONVERS:ADD AL,OFH SHR AH,01HMOV BX,077AH JNZ DISP0MOV DS:[BX],AL MOV DX,0FF22HINC BX MOV AL,0FFHRET OUT DX,ALINTRE2:MOV AL,20H RETMOV DX,INTPORT1 DA TA1:DBDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H 0FFH,0CH,0DEH,0C7H,8CH,0F3H,0BFH DBDB 90H,0A3,0A1H,86H,8FH 80H,90H,88H,83H,0C6H,0A1H,86H,8EH WBUF1:MOV BX,0 MOV WORD PTR:[BX+077AH],0509H MOV WORD PTR:[BX+077AH],1701H ADD BX,2ADD BX,2 MOV WORD PTR :[BX+077AH],0802HRETCODE ENDSEND START五、实验体会:本次实验中只出来了"8259-1"结果,没有出现"Good"结果。
实验报告构造函数和析构函数实验过程、内容:1、(1) 定义一个正方形类,该类包括:正方形的边长(取值范围为1-30个“*”),四个成员函数,分别为:取边长、设置边长、画正方形和在构造这些类对象时能初始化正方形边长。
编写主函数实现:(A)创建一个边长为5的正方形;(B)调用成员函数打印正方形的形状;(C)由用户输入正方形边长,修改边长的值;(D)重新打印正方形。
4f1s.h的内容class Square{private:int side;public:Square( int a = 5);void set( int a);int get();void drawn();};4f1s.cpp的内容#include<iostream>#include"4f1s.h"using namespace std;Square::Square(int a){side = a;}void Square::set(int a){side = a;}int Square::get(){return side;}void Square::drawn(){for(int i =0; i<side; i++){for(int j = 0; j<side; j++){cout<<"* ";}cout<<endl;}}Main 的内容#include<iostream>#include"4f1s.h"using namespace std;int main(){Square s1;cout<<" 边长为"<<s1.get()<<endl;s1.drawn();cout<<"输入边数:"<<endl;int a;cin>>a;s1.set(a);cout<<"画出边长为"<<s1.get()<<"的正方形图形"<<endl;s1.drawn();return 0;}实验2、声明一个时间类,时间类中有3个私有数据成员(Hour, Minute, Second)和两个公有成员函数(SetTime 和Print_Time)。
航空大学实验报告2011年11月16日课程名称: 面向对象程序设计B 实验名称:构造函数班级:102022 :林书晨指导老师评定:签名:实验二析构函数1.实验目的通过实验理解析构函数的概念与其特殊应用2.实验容应用VC++6.0的编辑环境构造一个类student,该类主要实现学生的基本操作。
该学生类包括学生学生学号学生成绩(课程数目不定,起存储空间应动态申请),实现对该学生信息的初始化,求该学生的总成绩,平均成绩,最高分与最低分以及最后输出,具体说明如下:class Student{public:Student(char *n,char *s,int num,double *s);~Student();double GetSum();double GetAver();double GetMax();double GetMin();void Show();private:char *name;//student namechar *stuno;//student noint score_num;//score numberDouble *score; //student score};3.概要设计a.析构函数class Student{public:Student(char *n,char *s,int num,double *s); ~Student();double GetSum();double GetAver();double GetMax();double GetMin();void Show();private:char *name;//student namechar *stuno;//student noint score_num;//score numberDouble *score; //student score};b.实现功能1.double GetSum() 求总成绩{double s=0;for(int i=0; i<score_num; i++)s = s+*(score+i);return s;}2.double GetAver() 求平均成绩{return GetSum()/score_num ;}3.double GetMax() 求最高分数{double max=*score;for(int i=0; i<score_num; i++) {if(*(score+i)>=max)max=*(score+i);}return max;}4.double GetMin() 求最低分数{double m=*score;for(int i=0; i<score_num; i++) {if(*(score+i)<=m)m=*(score+i);}return m;}4.详细设计#include<iostream.h>#include<string.h>class Student{private:char *name; //student namechar *stuno; //student noint score_num; //课程数量double *score; //存储学生课程成绩的数组,其长度由score_num决定public:Student(char *n,char *m,int num,double *s){name=new char[strlen(n)+1];stuno=new char[strlen(m)+1];strcpy(name,n);strcpy(stuno,m);score_num=num;score=s;}~Student(){delete []name;delete []stuno;cout<<"析构"<<endl;}double GetSum() 求总成绩{double s=0;for(int i=0; i<score_num; i++)s = s+*(score+i);return s;}double GetAver() 求平均成绩{return GetSum()/score_num ;}double GetMax() 求最高分数{double max=*score;for(int i=0; i<score_num; i++){if(*(score+i)>=max)max=*(score+i);}return max;}double GetMin() 求最低分数{double m=*score;for(int i=0; i<score_num; i++){if(*(score+i)<=m)m=*(score+i);}return m;}void Show(){cout<<name<<endl<<stuno<<endl<<GetAver()<<endl<<GetMax()<<endl<<GetMin()<<endl;return ;}};void main(){double a[3]={50.0,80.0,60.0};Student student001("stu001","001",3,a); student001.Show();return ;}5.程序调试a.(1)未初始化函数(2)调试加入初始化函数(3)程序可运行(4)输入数据(5)结果正确b.运行结果6.实验总结在实验中其实程序的写入并不难,只是我们应该注意一些具体的细节,比如函数的初始化,函数的具体方法等等。
实验三构造函数与析构函数1、实验目的:1)掌握构造函数和析构函数定义方法;2)掌握构造函数的重载、具有默认值的构造函数的使用方法;3)加深对构造函数的特殊用途的理解。
2、实验内容:2.1 分析程序指出程序运行的结果:1)p106 3.15程序代码:运行结果:2)分析下面程序中的对象传递,写出输出结果。
#include<iostream.h>Using std::cout;Using std::endl;class Cylinder{public:Cylinder(){}Cylinder(double r,double h);void setcylinder(double r,double h);double getradius(){return radius;}double getheight(){return height;}double volume();double surface_area();private:double radius;double height;};const double PI=3.1415926;Cylinder::Cylinder(double r,double h){radius=r;height=h;}void Cylinder::setcylinder(double r,double h){radius=r;height=h;}double Cylinder::volume(){double vol;vol=PI*radius*radius*height;return vol;}double Cylinder::surface_area(){double area;area=2*PI*radius*height+2*PI*radius*radius;return area;}void main(){Cylinder cylinder1(7.0,12.0),cylinder2;cylinder2.setcylinder(12.3,18.7);cout<<"the radius of cylinder1 is:\t"<<cylinder1.getradius()<<endl;cout<<"the height of cylinder1 is:\t"<<cylinder1.getheight()<<endl;cout<<"the volume of cylinder1 is:\t"<<cylinder1.volume()<<endl;cout<<"the surfacearea of cylinder1 is:\t"<<cylinder1.surface_area()<<endl; cout<<"the radius of cylinder2 is:\t"<<cylinder2.getradius()<<endl;cout<<"the height of cylinder2 is:\t"<<cylinder2.getheight()<<endl;cout<<"the volume of cylinder2 is:\t"<<cylinder2.volume()<<endl;cout<<"the surfacearea of cylinder2 is:\t"<<cylinder2.surface_area()<<endl;}运行结果:3)分析下面的程序,指出程序的错误。
南昌航空大学实验报告2011年11月16日课程名称: 面向对象程序设计B 实验名称:构造函数班级:102022 姓名:林书晨指导老师评定:签名:实验二构造函数1、实验目的通过实验理解构造函数的概念与其特殊应用。
2、实验内容应用VC++6.0的编辑环境构造一个类Triangle,该类主要实现三角形的基本操作,例如初始化(构造函数及构造函数的重载)、求三角形的周长、面积、判断该三角形是什么三角形(等边、等腰、直角、等边直角、一般三角形、非三角形)、输出等,具体说明如下:class Triangle{public:Triangle(double,double,double);Triangle(double,double);Triangle(double);Triangle();double GetArea();double GetPerimeter();double Show();private:double a,b,c;};3.概要设计a.构造函数class Triangle{public:Triangle(double x,double y,double z) {a=x;b=y;c=z;}Triangle(double x,double y){a=x;b=y;c=5;}Triangle(double x){a=x;b=4;c=5;}Triangle(void){a=3;b=4;c=5;}b.实现功能1. D ouble GetArea() //求面积{double m=GetPerimeter()/2;return sqrt(m*(m-a)+m*(m-b)+m*(m-c)); }2.Double GetPerimeter() //求周长{return a+b+c;}3.Void Show() //判断是什么三角形if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) {if(a == b || a == c || b == c){cout<<"right angled isosceles triangle"<<endl;}else{cout<<"right angled triangle"<<endl;}}else{if(a == b || a == c || b == c){if(a==b && b==c){cout<<"regular triangle"<<endl;}else{cout<<"isosceles triangle"<<endl;}}else{cout<<"General triangle"<<endl;}else{cout<<"Not a triangle"<<endl;}return ;4.详细设计#include<iostream.h>#include<math.h>class Triangle{public:Triangle(double x,double y,double z) {a=x;b=y;c=z;}Triangle(double x,double y){a=x;b=y;c=5;}Triangle(double x){a=x;b=4;c=5;}Triangle(void){a=3;b=4;c=5;}double GetArea() //求面积{double w=GetPerimeter()/2;return sqrt(w*(w-a)+w*(w-b)+w*(w-c)); }double GetPerimeter() //求周长{return a+b+c;}void Show() //判断是什么三角形{if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a){if(a == b || a == c || b == c){cout<<"right angled isosceles triangle"<<endl;}else{cout<<"right angled triangle"<<endl;}}else{if(a == b || a == c || b == c){if(a==b && b==c){cout<<"regular triangle"<<endl;}else{cout<<"isosceles triangle"<<endl;}}else{cout<<"General triangle"<<endl;}else{cout<<"Not a triangle"<<endl;}return ;}void Print(){cout<<"The Area is :"<<GetArea()<<" "<<"The Perimeter is :"<<GetPerimeter()<<" ";Show();cout<<endl<<endl;return ;}private:double a,b,c;};void main(){Triangle tr1(6.0); Triangle tr2(5.0,4.0); Triangle tr3(6.0,6.0,6.0); Triangle tr4;tr1.Print();tr2.Print();tr3.Print();tr4.Print();return ;}5.程序调试a.(1)未初始化函数(2)三角形形状判断函数不明(3)没有正确的数据输出(4)调试加入初始化函数(5)该了判断函数三角形函数(6)程序可运行(7)输入数据(8)结果正确b.运行结果输入:3,4,5输出:right angled triangleThe Area is :6The Perimeter is :12输入:4,4,5输出:Not a triangle输入:4,4,4输出:regular triangleright angled triangleThe Area is :12The Perimeter is :6.9282输入:4,4,5输出:right angled triangleThe Area is :13The Perimeter is :7.8062 输入:2,2,2*2^(1/2)输出:right angled isosceles triangle The Area is :4+2*2^(1/2) The Perimeter is :2输入:3,5,6输出:General triangleThe Area is :14The Perimeter is :4.56.实验总结在实验中其实程序的写入并不难,只是我们应该注意一些具体的细节,比如函数的初始化,函数的具体方法等等。
实验11构造函数与析构函数实验报告一、实验目的1.熟悉类的构造函数和析构函数的概念。
2.学会类的构造函数和析构函数的使用方法。
3.体会对象与指针的关系及其使用方法。
二、实验环境(调试程序所使用的软硬件环境)软件环境:VC++6.0硬件环境:宏基Intel 奔4 主频2.8GHz,内存256MB三、实验内容、结果及分析1、题目:设计并测试一个名为Ellipse的椭圆类,其属性为其圆心坐标以及半长轴和半短轴的长度。
设计一个构造函数对这些属性进行初始化,并通过成员函数计算出椭圆的面积。
源程序清单:(调试好的源程序代码)#include "stdafx.h"#includeusing namespace std;struct coo{double x,y;};class Ellipse{private:coo a;double lon;double shor;public:Ellipse();void input();void cir();};int main (){Ellipse tuo1,tuo2 ;cout<<"默认椭圆1:"<<endl;< p="">tuo1.cir();cout<<"请输入圆心坐标,半长轴及半短轴长度"<<endl;< p=""> tuo2.input();cout<<"你所要算椭圆2:"<<endl;< p="">tuo2.cir();return 0;}Ellipse::Ellipse(){a.x=0.0;a.y=0.0;lon=12;shor=10;}void Ellipse::input (){cin>>a.x>>a.y>>lon>>shor;}void Ellipse:: cir(){cout<< "圆心为:("<<a.x<<","<<a.y<<")"<<endl< p=""><<"面积:"<<lon*shor*3.1415926<<endl;< p="">}主要标识符说明:(源程序中主要标识符含义说明)定义结构体coo为坐标值包含两个变量x(横坐标)y(坐标)均为双精度型;struct coo{double x,y;};声明类Elipse含有成员变量a(坐标coo型),lon(半长轴长)双精度型,shor(半短轴长)双精度型;成员函数1.Ellipse();构造函数(用于初始化椭圆圆心坐标值,半长轴和半短轴的长度)2 void input();用于输入3 void cir();用于计算椭圆形的面积并输出;class Ellipse{private:coo a;double lon;double shor;public:Ellipse();void input();void cir();};定义对象椭圆1tuo1,椭圆2 tuo2实验结果:(程序运行结果)实验中遇到的问题及解决的方法2、题目:建立一个对象数组,内放5个学生的数据(学号、成绩),编写程序实现以下功能:(1)用指针指向数组首元素,输出第1、3、5个学生的数据(2)编写max函数,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其数据。
实验三构造函数和析构函数实验三、构造函数和析构函数一、实验目的1(掌握声明类的方法,类和类的成员的概念以及定义对象的方法。
2(初步掌握用类和对象编制基于对象的程序。
3(学习检查和调试基于对象的程序。
4(掌握类的构造函数和析构函数的概念和使用方法。
5(掌握对象数组、对象的指针及其使用方法。
二、实验内容1(检查下面的程序,找出其中的错误,并改正之。
然后上机调试,使之能正常运行。
(1)#include <iostream> using namespace std; class A{public:A(int i=0){m=i;} //构造函数不要返回类型名void show(){cout<<m<<endl;}void set (int i) {m = i ;}~A(){} //析构函数不要返回类型名private:int m;};int main(){A a(5);a.show();a.set(10);a.show();return 0;}//结果://5//10(2)#include <iostream>using namespace std;class X{ private:int a=0;//私有成员不允许赋初值int &b;const int c;void setA(int i){a=i;}X(int i){ a=i;}public:int X(){ a=b=0;}//构造函数无返回值X(int i, int j, int k){ a=i; b=j; c=k; }setC(int k) const { c=c+k;}//成员函数没有标明返回值类型. };int main(){X x1;X x2(2) ;//私有成员函数不可被外界访问.X x3(1,2,3) ;x1.setA(3) ;//私有成员函数不可被外界访问.return 0 ;}改正后的程序:#include<iostream> using namespace std; class X { private:int a;int b;int c;void setA(int i){a=i;} X(int i){ a=i;}public:X(){ a=b=0;}X(int i, int j, int k){ a=i; b=j; c=k; }void setC(int k) { c=c+k;}};int main(){X x1;X x3(1,2,3);return 0;}2(请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。
南昌航空大学实验报告课程名称:C 语言程序设计实验名称:正弦信号模拟采样及特征参数分析软件设计 班级:姓名:同组人:指导教师评定:签名:一、实验目的1、了解正弦信号采样的基本原理;2、了解正弦信号采样的离散处理方法;3、进一步掌握C 语言输入输出语句的使用和编程方法;4、进一步掌握C 语言顺序结构、选择结构和循环结构程序的编写;5、进一步掌握C 语言函数的定义和调用,数组、结构体及文件的使用及编程方法;6、进一步培养把实际问题转化为C 语言模型和模块化程序设计的能力。
二、实验内容该实验要求对一输入正弦信号进行离散处理并对该信号的基本特征进行定量分析。
采用不同的抽样频率分别求出该信号的有效值、峰峰值、平均值。
三、实验要求具体功能指标要求如下:1、 生成模拟信号)2cos()(0ψπ+=ft A n Y +B; 其中A (幅度值)、f (频率)、0ψ(初相角)、B(直流分量)由键盘输入;2、 对该信号在一个周期内分别等间隔采样32、64点,并把采样的值分别存放在不同的数组中;注:采样的计算方法如下:设信号的频率为f ,采样N 点,则周期为T=1/f; 每两个采样点的间隔为⊿t=T/N 。
第n 点的采样值为:)/2cos()(0ψπ+=N n A n Y+B 分别计算信号的有效值、峰峰值、平均值,并在屏幕上显示; 其中有效值计算公式为:Nn YN n ∑=02)( 平均值计算公式为:Nn Y Y ∑=)(平 峰峰值计算公式为:min max n n Y Y Y -=-峰峰3、 完成对信号的幅度值、频率、初相角、有效值、峰峰值、平均值的显示并以文件形式存储。
四、实验流程图N ∑=四实验源程序、/***********************************************************************************************/ /**************************正弦信号模拟采样及特征参数分析软件设计*******************************/ /***********************************************************************************************/ #include<stdio.h>#include<math.h>#include<stdlib.h>#define PI 3.1415926struct shuju //结构体数组存放数据{double average; //平均值double virt; //有效值double peak; //峰峰值double data[64]; //存储每个采样点的数据}str[2]; //两次采样的数据分开存放struct shuju *p = str;void value(double *fp,int n,int m) //用于求各个采样点的平均值{int i;double sum = 0,aver;for(i = 0;i < n;i++){sum = sum + fp[i];}aver = sum / n;printf("平均值:%lf\n",aver);p[m].average = aver;}void fun(double *fp,int n,int m) //用于求每次不同间隔采样后的峰峰值{int i;double min,max;for(min = max = fp[0],i = 0;i < n;i++) //遍历找出最大值最小值{if(min > fp[i]){min = fp[i];}if(max < fp[i]){max = fp[i];}}printf("峰峰值为:%lf\n",max - min);p[m].peak = (max - min);}void fun1(double *fp,int n,int m) //用于求每次采样的有效值{int i;double sum = 0,yx; //sum用于寄存累加数据yx存放有效值for(i = 0;i < n;i++){sum = sum + fp[i] * fp[i];}yx = sqrt(sum / n);printf("有效值为:%lf\n",yx);p[m].virt = yx;}void write(){int i;FILE *fp;if((fp = fopen("G:\\b.txt","w")) == NULL) //判断文件写入是否出错{printf("写入文件出错!\n");exit(1);}else{fprintf(fp,"32点采样数据:\n");for(i =1;i <= 32;i++){fprintf(fp,"%lf ",p[0].data[i - 1]);if(i >= 8 && i % 8 == 0)fprintf(fp,"\n");}fprintf(fp,"平均值峰峰值有效值\n");fprintf(fp,"%lf ",p[0].average);fprintf(fp,"%lf ",p[0].peak);fprintf(fp,"%lf ",p[0].virt);fprintf(fp,"\n");fprintf(fp,"\n64点采样数据:\n");for(i =1;i <= 64;i++){fprintf(fp,"%lf ",p[1].data[i - 1]);if(i >= 8 && i % 8 == 0)fprintf(fp,"\n");}fprintf(fp,"平均值峰峰值有效值\n");fprintf(fp,"%lf ",p[1].average);fprintf(fp,"%lf ",p[1].peak);fprintf(fp,"%lf ",p[1].virt);fprintf(fp,"\n");fclose(fp);}}int main(){int i;double A,f,x,B,t; //A(幅度值)、f(频率)、x(初相角)、B(直流分量) printf("请输入A(幅度值)、f(频率)、x(初相角)、B(直流分量)\n");scanf("%lf%lf%lf%lf",&A,&f,&x,&B);for(i = 0;i < 32;i++){t = (i + 1) / (f * 32);p[0].data[i] = A * cos(2 * PI * f * t + x) + B;}printf("32点采样的数据为:\n");for(i = 1;i <= 32;i++){printf("%lf ",p[0].data[i - 1]);if(i >= 8 && (i % 8) == 0) //控制每行输出的数据个数{printf("\n");}}value(p[0].data,32,0);fun(p[0].data,32,0);fun1(p[0].data,32,0);for(i = 0;i < 64;i++){t = (i + 1) / (f * 64);p[1].data[i] = A * cos(2 * PI * f * t + x) + B;}printf("64点采样数据为:\n");for(i = 1;i <= 64;i++){printf("%lf ",p[1].data[i - 1]);if(i >= 8 && (i % 8) == 0) //控制每行输出的数据个数{printf("\n");}}value(p[1].data,64,1);fun(p[1].data,64,1);fun1(p[1].data,64,1);write(); //调用文件写入函数将数据写入到磁盘中return 0;}四、结果分析程序通过输入A(幅度值)、f(频率)、x(初相角)、B(直流分量),生成模拟信号数据,分别建立32、64个采样点进行数据采集,然后调用函数进行计算有效值、平均值、峰峰值,并将结果写入磁盘中。
面向对象程序设计实验指导书任课教师:陈斌全二零零七年九月前言本指导书是软件工程专业本科课程《面向对象程序设计B》的实验指导书,一般人员也可以使用它作为学习C++语言的上机指导。
因为选择以Microsoft公司的C++开发环境Visual C++6.0作为实验环境,因此书的前一部分介绍了Visual C++的一些基本知识,并且在实验进行的过程中穿插介绍使用Visual C++的一些技巧。
书的内容分为两大部分:第一部分介绍Visual C++实验环境;第二部分是具体的实验安排。
使用本书前,请先阅读以下内容:1.C++语言实验环境配置要求硬件配置:586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于20MB,硬盘自由空间不少于60MB。
推荐配置为内存32MB或64MB(或以上),硬盘自由空间500MB以上。
软件配置:操作系统:Windows95, Windows98, Windows NT3.51以上版本。
开发集成环境:Microsoft Visual C++5.0以上版本2.建立自己的工作目录你需要在计算机上先建立自己的工作目录,所有的实验都在该工作目录下进行。
使用Visual C++建立新项目时,需要指定该目录作为项目所在的目录。
本书中假设你的工作目录为c:\student\your_name,具体的实验目录由你的指导教师指定。
3.安装Visual C++Visual C++ 6.0和Visual C++ 5.0最大的不同是在联机帮助系统上做了很大改变。
Visual C++ 5.0的帮助系统直接集成在开发环境之中,在安装Visual C++ 5.0时就可以选择安装帮助内容。
而Visual C++ 6.0的联机帮助系统采用了MSDN(Microsoft Developer Network)库,在安装Visual C++ 6.0时,只安装了MSDN的索引,实际的内容在光盘上。
如果希望能脱离光盘使用帮助系统,需要在安装了Visual C++ 6.0以后,再运行MSDN的安装程序,把完整的库装到硬盘上。
南昌航空大学实验报告年月日课程名称:实验名称:班级:学生姓名:学号:指导教师评定签名:1、实验目的·理解类与对象的区别。
·学习掌握定义构造函数与析构函数的方法。
·学习把握默认构造函数的意义。
·了解类成员初始化,掌握构造与析构类成员的方式。
2、实验内容设计一个表示矩形的类Rect,其矩形成员长float * Length ,宽float * Width为指针变量,设计相应成员函数,实现下列功能:①构造函数设置长和宽(默认为1)。
②复制构造函数用老对象生成新对象。
③set()函数设置长和宽(默认为0)。
④计算并返回长方形的周长。
⑤计算并返回长方形的面积。
⑥析构函数释放动态分配的长和宽。
编制主程序应用指针建立对象测试类。
#include <iostream.h>class Rect{float *Length,*Width;public:Rect(float a=1,float b=1);Rect(Rect &);void set(float a=0,float b=0);float peri();float area();~Rect(){delete Length;delete Width;}};Rect::Rect(Rect &point){Length = point.Length;Width = point.Width ;}Rect::Rect(float a,float b){set(a,b);}void Rect::set (float a,float b){Length = new float;Width = new float;*Length = a;*Width = b;}float Rect::peri (){return 2 * (*Length) + 2 * (*Width);}float Rect::area (){return (*Length) * (*Width);}//主函数void main(){Rect r1(55.5,40);cout<<"周长为:"<<r1.peri()<<" 面积为: "<<r1.area()<<endl;cout<<"----------------------------------------------------\n";Rect *p=new Rect(r1);//思考:此处改为//Rect *p=new Rect; //下一行的输出会是什么结果cout<<"周长为:"<<p->peri()<<" 面积为: "<<p->area()<<endl;p->set(20.5,13);cout<<"周长为:"<<p->peri()<<" 面积为: "<<p->area()<<endl;;}3、调试过程Length,Width是两个float指针变量,它们是指向矩形的长宽变量的,但都无初值,就是只是定义了两个指针变量,并没有指向任何变量,所以在程序运行时,要开辟两个内存空间存放float变量,并使Length,Width指向这两个float型变量,否则会出错。
构造和析构函数范文构造函数(Constructor)是一种特殊的成员函数,它的主要作用是在创建一个对象时,为对象的成员变量赋初值。
析构函数(Destructor)则是用来清除对象完成后的工作,例如释放对象所占用的内存空间。
一、构造函数的作用:1.对象的初始化:构造函数可以在创建对象时自动初始化成员变量,提供对象的初始状态,保证对象在创建时就处于可用状态。
2.分配资源:例如在构造函数中申请动态内存、建立文件链接等。
3.对象的设置:构造函数可以将一些特殊的值设置到对象的成员变量中,使对象的状态符合要求。
二、构造函数的特点:1.构造函数必须与类同名且没有返回类型;2.构造函数可以重载,根据传入参数的不同选择不同的构造函数;3.如果用户没有定义构造函数,编译器会自动生成一个默认的构造函数。
三、构造函数的分类:1.缺省构造函数:没有任何参数的构造函数,也称为无参构造函数。
当用户没有定义构造函数时,编译器会自动生成一个缺省构造函数,该构造函数不做任何操作。
2.带参数构造函数:可以接受一个或多个参数的构造函数,用于初始化对象的成员变量。
用户可以根据实际需求自定义不同形式的构造函数。
四、析构函数的作用:1.清理资源:例如释放动态分配的内存、关闭文件等。
2.完成对象销毁前的清理工作。
五、析构函数的特点:1.析构函数与类同名前加上一个波浪号(~),没有参数和返回类型;2.析构函数没有重载的概念,每个类只能有一个析构函数;3.如果用户没有定义析构函数,编译器会自动生成一个默认的析构函数。
六、构造函数和析构函数的调用时机:1.构造函数:在创建对象时自动调用,无需手动调用。
2. 析构函数:在对象销毁时自动调用,无需手动调用。
通常在对象的生命周期结束时触发(例如对象超出作用域、delete释放动态内存、程序退出时)。
七、构造函数和析构函数的应用举例:1.构造函数:class Personprivate:int age;string name;public://缺省构造函数Person( {}//带参数构造函数Person(string n, int a) : name(n), age(a) {}};Person p1; // 使用缺省构造函数创建Person对象Person p2("Tom", 18); // 使用带参数构造函数创建Person对象2.析构函数:class Personprivate:int age;string name;public://构造函数Person(string n, int a) : name(n), age(a) {}//析构函数~Persocout << "Person object destroyed" << endl;}};int maiPerson p("Tom", 18);return 0;}输出结果为:Person object destroyed总结:构造函数用于初始化对象的成员变量,析构函数则用于释放对象所占用的资源。
构造函数与析构函数实验一.实验目的1. 掌握构造函数、析构函数声明、定义及使用方法;2. 掌握复制构造函数、默认参数构造函数等的定义、使用方法。
二.使用的设备和仪器计算机+Windows XP +Visual C++6.0三.实验内容及要求1、定义一个matrix类,用于表示二维矩阵,其私有成员为行、列、指针(两个*),公有成员函数为matrix()、~matrix()、get_element()、print(),其中matrix()用于初始化数据成员,~matrix()用于撤销内存,get_element()用于获取数组元素值,print()用于输出指定元素。
具体要求如下:(1)在构造函数中定义动态二维数组,其中数组的行、列,通过输入参量而定。
(2)在main()函数中创建一个matrix对象,并设置二维动态数组中的行为5、列为10的元素的值为500。
#include<iostream>#include<stdlib.h>using namespace std;class matrix{int rows;int columns;int **p;public:void set_element(int i,int j,int value);void print_m(int i,int j);matrix();~matrix();};matrix::matrix(){int h,l;cout<<"请输入行和列";cin>>h>>l;p=new int *[h];for(int i=0;i<h;i++)p[i]=new int[l];for(int i=0;i<h;i++)for(int j=0;j<l;j++)p[i][j]=0;}matrix::~matrix(){delete[]p;}void matrix::set_element(int i,int j,int value){p[i][j]=value;}void matrix::print_m(int i,int j){cout<<"元素为:"<<p[i][j]<<endl;}int main(){matrix m;m.set_element(5,5,500);m.print_m(5,5);system("pause");return 0;}2、请定义一个img类,其私有数据成员分别为行、列、空间分辨率、指针(两个*),其公有成员函数分别为构造函数、析构函数、输出函数、面积计算函数。
class 析构函数析构函数是面向对象编程中的一个重要概念,它在对象被销毁时被自动调用,用于释放对象占用的资源。
本文将从析构函数的定义、作用以及使用方法等方面进行详细介绍,以帮助读者更好地理解和应用析构函数。
一、什么是析构函数在面向对象编程中,每个类都可以定义一个析构函数。
它的名称与类名相同,前面加上一个波浪线(~),用于在对象被销毁时自动调用。
析构函数没有返回值,也不需要显式调用。
二、析构函数的作用析构函数主要用于释放对象占用的资源,例如关闭文件、释放内存等。
当对象不再被使用时,系统会自动调用析构函数,确保资源的正确释放,避免内存泄漏等问题。
三、析构函数的使用方法在C++中,析构函数的定义与其他成员函数类似,但需要在函数名前加上波浪线(~),并且不需要返回类型。
例如,以下是一个简单的示例:```class MyClass {public:// 构造函数MyClass() {// 构造函数的初始化操作}// 析构函数~MyClass() {// 释放资源的操作}};```在上面的示例中,析构函数会在MyClass对象被销毁时自动调用。
可以在析构函数中编写释放资源的代码,确保对象被销毁时相关资源得到正确释放。
四、析构函数的调用时机析构函数的调用时机是在对象被销毁时自动触发。
具体而言,有以下几种情况会触发析构函数的调用:1. 对象生命周期结束:当对象超出其作用域或被显式删除时,析构函数会被调用。
例如,当一个局部对象超出函数的作用域时,它的析构函数会被自动调用。
2. 动态分配的对象被释放:当使用new运算符动态分配的对象被释放时,析构函数会被调用。
例如,当使用delete运算符释放一个动态分配的对象时,它的析构函数会被自动调用。
3. 容器对象销毁时:当容器对象销毁时,它所包含的元素对象的析构函数会被调用。
例如,当一个包含多个对象的vector被销毁时,其中每个对象的析构函数会被自动调用。
五、注意事项在使用析构函数时,需要注意以下几点:1. 析构函数通常用于释放资源,例如关闭文件、释放内存等。
南昌航空大学实验报告
2011年11月16日
课程名称: 面向对象程序设计B 实验名称:构造函数班级:102022 姓名:林书晨
指导老师评定:签名:
实验二析构函数
1.实验目的
通过实验理解析构函数的概念与其特殊应用
2.实验内容
应用VC++6.0的编辑环境构造一个类student,该类主要实现学生的基本操作。
该学生类包括学生姓名学生学号学生成绩(课程数目不定,起存储空间应动态申请),实现对该学生信息的初始化,求该学生的总成绩,平均成绩,最高分与最低分以及最后输出,具体说明如下:
class Student{
public:
Student(char *n,char *s,int num,double *s);
~Student();
double GetSum();
double GetAver();
double GetMax();
double GetMin();
void Show();
private:
char *name;//student name
char *stuno;//student no
int score_num;//score number
Double *score; //student score
};
3.概要设计
a.析构函数
class Student{
public:
Student(char *n,char *s,int num,double *s); ~Student();
double GetSum();
double GetAver();
double GetMax();
double GetMin();
void Show();
private:
char *name;//student name
char *stuno;//student no
int score_num;//score number
Double *score; //student score
};
b.实现功能
1.double GetSum() 求总成绩
{
double s=0;
for(int i=0; i<score_num; i++)
s = s+*(score+i);
return s;
}
2.double GetAver() 求平均成绩{
return GetSum()/score_num ;
}
3.double GetMax() 求最高分数
{
double max=*score;
for(int i=0; i<score_num; i++) {
if(*(score+i)>=max)
max=*(score+i);
}
return max;
}
4.double GetMin() 求最低分数{
double m=*score;
for(int i=0; i<score_num; i++) {
if(*(score+i)<=m)
m=*(score+i);
}
return m;
}
4.详细设计
#include<iostream.h>
#include<string.h>
class Student{
private:
char *name; //student name
char *stuno; //student no
int score_num; //课程数量
double *score; //存储学生课程成绩的数组,其长度由score_num决定public:
Student(char *n,char *m,int num,double *s)
{
name=new char[strlen(n)+1];
stuno=new char[strlen(m)+1];
strcpy(name,n);
strcpy(stuno,m);
score_num=num;
score=s;
}
~Student()
{
delete []name;
delete []stuno;
cout<<"析构"<<endl;
}
double GetSum() 求总成绩
{
double s=0;
for(int i=0; i<score_num; i++)
s = s+*(score+i);
return s;
}
double GetAver() 求平均成绩
{
return GetSum()/score_num ;
}
double GetMax() 求最高分数
{
double max=*score;
for(int i=0; i<score_num; i++)
{
if(*(score+i)>=max)
max=*(score+i);
}
return max;
}
double GetMin() 求最低分数
{
double m=*score;
for(int i=0; i<score_num; i++)
{
if(*(score+i)<=m)
m=*(score+i);
}
return m;
}
void Show()
{
cout<<name<<endl
<<stuno<<endl
<<GetAver()<<endl
<<GetMax()<<endl
<<GetMin()<<endl;
return ;
}
};
void main()
{
double a[3]={50.0,80.0,60.0};
Student student001("stu001","001",3,a); student001.Show();
return ;
}
5.程序调试
a.
(1)未初始化函数
(2)调试加入初始化函数(3)程序可运行
(4)输入数据
(5)结果正确
b.运行结果
6.实验总结
在实验中其实程序的写入并不难,只是我们应该注意一些具体的细节,比如函数的初始化,函数的具体方法等等。
7.附录
#include<iostream.h>
#include<string.h>
class Student{
private:
char *name;
char *stuno;
int score_num;
double *score;
public:
Student(char *n,char *m,int num,double *s) {
name=new char[strlen(n)+1];
stuno=new char[strlen(m)+1];
strcpy(name,n);
strcpy(stuno,m);
score_num=num;
score=s;
}
~Student()
{
delete []name;
delete []stuno;
cout<<"析构"<<endl;
}
double GetSum()
{
double s=0;
for(int i=0; i<score_num; i++)
s = s+*(score+i);
return s;
}
double GetAver()
{
return GetSum()/score_num ;
}
double GetMax()
{
double max=*score;
for(int i=0; i<score_num; i++)
{
if(*(score+i)>=max)
max=*(score+i);
}
return max;
}
double GetMin()
{
double m=*score;
for(int i=0; i<score_num; i++)
{
if(*(score+i)<=m)
m=*(score+i);
}
return m;
}
void Show()
{
cout<<name<<endl
<<stuno<<endl
<<GetAver()<<endl
<<GetMax()<<endl
<<GetMin()<<endl;
return ;
}
};
void main()
{
double a[3]={50.0,80.0,60.0};
Student student001("stu001","001",3,a); student001.Show();
return ;
}。