VC++程序设计课内实验报告.docx

上传人:b****9 文档编号:24992125 上传时间:2023-06-03 格式:DOCX 页数:28 大小:162.30KB
下载 相关 举报
VC++程序设计课内实验报告.docx_第1页
第1页 / 共28页
VC++程序设计课内实验报告.docx_第2页
第2页 / 共28页
VC++程序设计课内实验报告.docx_第3页
第3页 / 共28页
VC++程序设计课内实验报告.docx_第4页
第4页 / 共28页
VC++程序设计课内实验报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

VC++程序设计课内实验报告.docx

《VC++程序设计课内实验报告.docx》由会员分享,可在线阅读,更多相关《VC++程序设计课内实验报告.docx(28页珍藏版)》请在冰豆网上搜索。

VC++程序设计课内实验报告.docx

VC++程序设计课内实验报告

实验报告

课程名称VC++程序设计

专业班级电子0942

姓名

学号

电气与信息学院

和谐勤奋求是创新

实验教学考核和成绩评定办法

1.课内实验考核成绩,严格按照该课程教学大纲中明确规定的比重执行。

实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。

2.单独设立的实验课考核按百分制评分,考核内容应包括基本理论、实验原理和实验。

3.实验考核内容包括:

1)实验预习;2)实验过程(包括实验操作、实验记录和实验态度、表现);3)实验报告;权重分别为0.2、0.4、0.4;原则上根据上述三个方面进行综合评定。

学生未取得1)和2)项成绩时,第3)项成绩无效。

4.实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现的问题。

实验成绩在教师手册中有记载。

实验报告主要内容

一.实验目的

二.实验仪器及设备

三.实验原理

四.实验步骤

五.实验记录及原始记录

六.数据处理及结论

七.实验体会(可选项)

注:

1.为了节省纸张,保护环境,便于保管实验报告,统一采用A4纸,实验报告建议双面打印(正文采用宋体五号字)或手写,右侧装订。

2.实验类别指验证、演示、综合、设计、创新(研究)、操作六种类型实验。

3.验证性实验:

是指为了使学生巩固课程基本理论知识而开设的强调演示和证明,注重实验结果(事实、概念或理论)的实验。

4.综合性实验:

是指实验内容涉及本课程的综合知识或本课程相关的课程知识的实验。

5.设计性实验:

是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的实验。

实验题目

实验五构造函数与析构函数的编程

实验室

电信机房

实验时间

年月日

实验类别

验证

同组人数

1

成绩

指导教师签字:

一、实验目的

1.进一步加深对类和对象的理解。

2.掌握类的构造函数和析构函数的概念、意义和使用方法。

3.掌握重载构造函数的含义和使用。

4.编写一个较为复杂的类和对象的应用程序。

二、实验内容

1.设计一个程序,定义一个矩形类,包括数据成员和函数成员。

要求有构造函数、析构函数,还有一个成员函数area()用来计算并显示矩形的面积,并编写main函数进行测试。

程序:

#include

#include

classRect

{

public:

Rect(intl,intw);

~Rect();

intArea();

private:

intnLength;

intnWidth;

};

Rect:

:

Rect(intl,intw)

{cout<<"executingconstructor..."<

nLength=l;

nWidth=w;

cout<<"nLength="<

}

Rect:

:

~Rect()

{cout<<"executingconstructor..."<

cout<<"nLength="<

}

intRect:

:

Area()

{intt;

t=nLength*nWidth;

returnt;

}

intmain()

{RectA(3,4);

cout<<"s="<

return0;}

运行结果:

2.重载构造函数。

修改上题,一种构造函数用整型变量记录矩形的长和宽,另一种构造函数用double型记录矩形的长和宽,然后完成成员函数及主函数。

程序:

#include

#include

classRect

{public:

Rect(intl,intw);

Rect(doubleu,doublev);

intArea();

doubleArea(doubleu,doublev);

~Rect();

private:

intnLength;

intnWidth;

doublemLength;

doublemWidth;

};

Rect:

:

Rect(intl,intw)

{cout<<"executingconstructor..."<

nLength=l;

nWidth=w;

cout<<"nLength="<

}

Rect:

:

Rect(doubleu,doublev)

{cout<<"executingconstructor..."<

mLength=u;

mWidth=v;

cout<<"mLength="<

Rect:

:

~Rect()

{cout<<"executingconstructor..."<

intRect:

:

Area()

{intt;

t=nLength*nWidth;

returnt;}

doubleRect:

:

Area(doubleu,doublev)

{doubler;

r=mLength*mWidth;returnr;}

voidmain()

{RectA(3,4);

cout<<"a的面积="<

RectB(22,33);

cout<<"b的面积="<

远行结果:

3.构造一个类countstr,要求用构造函数设置计数器count的初始值为0,成员函数countchar()不返回任何值,它要求用户输入一段文字,按Enter键后结束计算,用count记录输入的字符数,成员函数getchar()返回count的整数值。

程序:

#include

classcountstr

{public:

countstr(){count=0;}

voidcountchar(){cout<<"请输入字符串:

";

cin>>str;

while(str[count]!

='\0')count++;}

intgetchar(){returncount;}

private:

intcount;charstr[200];};

voidmain(){countstrs;s.countchar();

cout<<"thenumber="<

实验题目

实验六利用友元编程

实验室

电信机房

实验时间

年月日

实验类别

验证

同组人数

1

成绩

指导教师签字:

一、实验目的

1.掌握友元函数和友元类的概念、定义和作用。

2.会使用友元编程。

3.进一步学习内存空间动态分配和释放的方法。

二、实验内容

1.有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法运算。

2.定义一个由y=ax+b确定的直线类Line,该类的构造函数初始化直线,成员函数Print显示该直线方程,友元函数SetPoint()求解两条直线的交点。

3.下列程序是有关友元类的,程序中将A类声明为B类的友元类,A类中所有的成员函数都是B类的友元函数,请给程序填空。

#inlcude

classB;

classA

{

private:

intx;

public:

A(intxx){x=xx;}

intSet(B&);

intGet(){returnx;}

};

classB

{

private:

intx;

public:

B(intxx){①}

friend②

};

intA:

:

Set(③)

{returnx=b.x;}

voidmain()

{Aa(10);

Bb(20);

cout<

三、编程分析及运行结果

1、#include

classVector

{public:

Vector(doublem=0,doublen=0){x=m;y=n;}

voiddisplay(){cout<<"("<

friendVectoroperator+(Vector&a,Vector&b)

{Vectort;t.x=a.x+b.x;t.y=a.y+b.y;returnt;}

friendVectoroperator-(Vector&a,Vector&b)

{Vectort;t.x=a.x-b.x;t.y=a.y-b.y;returnt;}

~Vector(){}

private:

doublex,y;

};

voidmain()

{Vectora1(8,6),a2(1,2.1),a3,a4;

cout<<"向量a1=";a1.display();

cout<<"向量a2=";a2.display();

a3=a1+a2;

cout<<"a1+a2=";a3.display();

a4=a1-a2;

cout<<"a1-a2=";a4.display();

}

2、#include

classLine

{public:

Line(doublem=0,doublen=0){a=m;b=n;}

voidprint(){cout<<"直线y="<

voidfriendsetpoint(Line&l1,Line&l2)

{doublex,y;

if(l1.a==l2.a)cout<<"两直线平行,无交点";

else{x=(l1.b-l2.b)/(l2.a-l1.a);

y=l1.a*x+l1.b;

cout<<"两直线交点为("<

}

}

~Line(){}

private:

doublea,b;

};

voidmain()

{LineL1(3,5),L2(-2,6);

L1.print();

L2.print();

setpoint(L1,L2);

}

3、填空后程序:

#include

classB;

classA

{

private:

intx;

public:

A(intxx){x=xx;}

intSet(B&);

intGet(){returnx;}

};

classB

{

private:

intx;

public:

B(intxx){x=xx;}

friendclassA;

};

intA:

:

Set(B&b)

{returnx=b.x;}

voidmain()

{Aa(12);

Bb(34);

cout<

a.Set(b);

cout<

}

四、解决方法及难点

难点:

函数重载时,注意重载的实现方法:

通过形参类型或个数来区分调用哪个函数。

实验题目

实验七继承与派生的编程

实验室

电信机房

实验时间

年月日

实验类别

验证

同组人数

1

成绩

指导教师签字:

一、实验目的

1.了解继承在面向对象程序设计中的重要作用。

2.理解继承与派生的概念,掌握单继承和多继承的定义方法。

3.熟悉公有派生和私有派生的访问特性。

4.掌握继承中基类和派生类的构造函数定义和调用过程。

5.了解虚基类的作用和用法,会使用虚基类,学习虚基类在解决二义性问题中的作用

二、实验内容

1.有以下程序,请完成下面的工作:

1)阅读程序,写出运行后的输出结果;

2)然后上机运行,验证结果是否正确;

3)分析程序执行过程,尤其是调用构造函数和析构函数的过程。

#include

classA

{public:

A(){cout<<“constructingA”<

~A(){cout<<“destructingA”<

};

classB:

publicA

{public:

B(){cout<<“constructingB”<

~B(){cout<<“destructingB”<

};

classC:

publicB

{public:

C(){cout<<“constructingC”<

~C(){cout<<“destructingC”<

};

voidmain()

{Cc1;

}

2.定义一个Point类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area()。

编写一个完整程序进行测试。

3.定义并描述一个人员类Person,它派生出学生类Student和教师类Teacher,学生类和教师类共同派生出在职读书的教师类Stu_Tech。

人员类有姓名、性别、身份证号、出生年月等信息;学生类有学号、成绩等信息;教师类有职务、职称等信息。

编写一个完整程序进行测试。

三、编程分析及运行结果

1、运行结果:

2、classPoint

{public:

voidinpoint(doublex,doubley)

{Px=x;Py=y;}

doublegetPx()

{returnPx;}

doublegetPy()

{returnPy;}

protected:

doublePx,Py;

};

classRectangle:

publicPoint

{public:

Rectangle(doublex,doubley,doubleh,doublew)

{inpoint(x,y);High=h;Wide=w;}

doublegetHigh(){returnHigh;}

doublegetWide(){returnWide;}

doubleArea(){returnHigh*Wide;}

protected:

doubleHigh,Wide;

};

classCircle:

publicPoint

{public:

Circle(doublex,doubley,doubler)

{inpoint(x,y);R=r;}

doublegetR()

{returnR;}

doubleArea()

{doublepi=3.1415926;returnpi*R*R;}

protected:

doubleR;

};

#include

voidmain()

{doublex,y,h,w,r;

cout<<"请输入矩形的位置坐标(x,y)、长、宽:

";

cin>>x>>y>>h>>w;

RectangleRect1(x,y,h,w);

cout<<"矩形的数据:

"<

<

<

cout<<"请输入圆的位置坐标(x,y)及半径:

";

cin>>x>>y>>r;

CircleC1(x,y,r);

cout<<"圆的数据:

"<

<<"),\tR="<

}

3、#include

#include

classPerson

{public:

Person();

Person(char*name1,charsex1,char*id1,char*birth);

voiddisplay();

~Person();

protected:

char*name;

char*id;

charsex;

char*birthday;

};

Person:

:

Person()

{name='\0';

sex=0;

id='\0';

birthday='\0';

}

Person:

:

Person(char*name1,charsex1,char*id1,char*birth)

{name=newchar[strlen(name1)+1];

name=strcpy(name,name1);

sex=sex1;

id=newchar[strlen(id1)+1];

id=strcpy(id,id1);

birthday=newchar[strlen(birth)+1];

birthday=strcpy(birthday,birth);

}

voidPerson:

:

display()

{cout<<"name:

"<

"<

"<

"<

}

Person:

:

~Person()

{delete[]name;

delete[]id;

delete[]birthday;

}

classStudent:

virtualpublicPerson

{public:

Student(char*name,charsex,char*id,char*birthday,longints_num1,floatscore1);

voiddisplay()

{Person:

:

display();

cout<<"s_number:

"<

"<

}

~Student(){}

protected:

longints_num;

floatscore;

};

Student:

:

Student(char*name1,charsex1,char*id1,char*birth,longints_num1,floatscore1):

Person(name1,sex1,id1,birth)

{s_num=s_num1;

score=score1;

}

classTeacher:

virtualpublicPerson

{public:

Teacher(char*name1,charsex1,char*id1,char*birth,char*posit,char*title1):

Person(name1,sex1,id1,birth)

{position=newchar[strlen(posit)+1];

position=strcpy(position,posit);

title=newchar[strlen(title1)+1];

title=strcpy(title,title1);

}

voiddisplay()

{Person:

:

display();

cout<<"Position:

"<

"<

}

~Teacher()

{delete[]position;

delete[]title;

}

protected:

char*position;

char*title;

};

classStu_teach:

publicStudent,publicTeacher

{public:

Stu_teach(char*name1,charsex1,char*id1,char*birth,longints_num1,floatscore1,char*posit,char*title1):

Person(name1,sex1,id1,birth),

Student(name1,sex1,id1,birth,s_num1,score1),Teacher(name1,sex1,id,birth,posit,title1){}

voiddisplay();

~Stu_teach(){}

};

voidStu_teach:

:

display()

{Student:

:

display();

cout<<"Position:

"<

"<

}

voidmain()

{Student

Teacherteacher","Professor");

Stu_teachteacher","Professor");

s1.display();

t1.display();

s_t1.display();

}

四、解决方法及难点

难点:

用虚基类解决继承和派生时的二义性问题..通过虚基类来实现.

实验八利用虚函数编程

一、实验目的

1.了解多态性的概念和虚函数的作用及使用方法。

2.了解静态关联和动态关联的概念和用法。

3.了解纯虚函数和抽象类的概念和用法。

4.学习使用虚函数的继承实现动态关联。

5.学习理解静态数据成员和静态成员函数的使用。

二、实验内容

1.事先阅读程序,给出其运行结果,上机验证虚函数的作用。

有如下程序:

#include

#include

classStudent//定义基类

{public:

Student(int,string,float);

voiddisplay();//声明输出函数

protected:

//受保护成员,派生类可访问

intnum;

stringname;

floatscore;

};

Student:

:

Student(intn,stringnam,floats)

{num=n;name=nam;score=s;}

voidStudent:

:

display()

{cout<

num:

?

<

\nname:

?

<

\nscore:

?

<

classGraduate:

publicStudent//声明公有派生类

{public:

Graduate(int,string,float,flaot);

voiddisplay();//声明输出函数

private:

floatpay;

};

Graduate:

:

Graduate(intn,stringnam,floats,flaotp):

Student(n,nam,s),pay(p){}

voidGraduate:

:

display()

{cout<<

num:

?

<

\nname:

?

<

\nscore:

?

<

\npay:

?

<

voidmain()

{Studentstud(1001,?

Li?

87.5);

Graduategrad(2001,?

Wang?

98.5,563.5);

Student*pt=&stud;

pt->display();

pt=&grad;

pt->display();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1