ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:38.05KB ,
资源ID:8861294      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8861294.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c++实验讲义.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

c++实验讲义.docx

1、c+实验讲义C+程序设计实验讲义软件学院C+教学团队目录实验1 C+基础 1实验2 类的定义与应用 1实验3 this指针、常量和静态成员和友元函数的使用 3实验4 运算符重载 6实验5 派生与继承 7实验6 多态性 8实验7 模板 10实验8 IO流 10实验9 windows程序设计 11实验1 C+基础1 实验目的和要求目的:快速掌握C+语言编程的方法,了解C+的增强功能,主要内容有:(1)输入流、输出流的使用;(2)重载、默认参数;(3)引用;(4)new和delete运算符分配内存。2实验内容:(1) 编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数

2、进行加,减,乘和除的运算。并输出计算结果,如: 23+123=146。(2) 用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。(3) 编写C+风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?(4) 在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数void swap(int & x, int & y)中实现将数据交换存放,并在主函数中打印出来。(5) 假设我们班有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.

3、0296,如果有100个同学,不相重的概率为3.072510-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。 学生的生日可以用随机数产生,rand()产生032767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(long int *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子, 以上函数需要包含头文件 stdlib.h 3 思考题:结合上机的体会,回答下列问题.

4、(1)C+引入了I/O流运算符,与 C语言相比,它们好处是什么?(2)引用是C+的很重要的功能,在函数定义中,如何使用引用?(3)函数重载设计不当会产生二义性问题,二义性主要体现在参数隐式类型转换和默认参数两个方面,举例说明两个问题,你认为该如何解决。(4)C+中define与const定义常量有什么区别?实验2 类的定义与应用1、实验目的和要求: 掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行时间,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。2、实验内容:(1)定义一个时间类Time,它能提供由时、分、秒组成的时间

5、。要求能够修改时间和打印出时间。(2)编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员的值。(3)设计一个时间类,要求包含以下功能:数据成员:时、分、秒成员函数:各种重载构造函数析构函数可以通过函数分别设置时间的各个组成部分也可以整体设置时间有一个tick函数,负责给当前时间加1秒钟,然后输出新的时间(4) 定义一个分数类如下,要求实现各个成员函数,并在主函数中测试两个分数的加减乘除等运算。class Rationalpublic: Rational(int nn=1,int mm=1); /构造函数

6、Rational R_add(Rational & A); /加 Rational R_sub(Rational & A); /减 Rational R_mul(Rational & A); /乘 Rational R_div(Rational & A); /除 void print(); /以简分数形式显示,注意约分private:void simple( ); /约分 int m; /分母 int n; /分子; (5) 定义一个类包含一个整型数的指针变量,在构造函数中用new分配10个整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出的成员函数。(6)

7、完成String类 class Stringpublic:String(const char *str = NULL); /普通构造函数String(const String &other); /拷贝构造函数 String(); /析构函数private:char *m_data; / 用于保存字符串;完成String 的3个成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。(7)完成Array类class Arraypublic: Array(); /所有数组元素初始化为0 int& getData(int i); /返回下标为i的数组元素的引用 void print();

8、/打印出所有数组元素的值 void input(); /对所有数组元素进行输入private: int m_data10;完成Array 的成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。(8) 定义圆类(由圆心坐标点类和半径组成),利用友元函数判断两个圆的位置关系(圆间关系包括相交、相切、相离)。 (9) 定义类Point.要求定义类对象时,可以有这样的定义语句: Point p1(1,2),p2(p1);#include class Point public: Point (int a, int b) x=a;y=b;void fun (Point &p);void fu

9、n (Point * p); private: int x,y;; void fun (Point &p)x=p.x ;y=p.y ;cout The fun(Point &p) x ; y=p-y ;cout Fun (Point *p) endl ; Void main()Point p(1,2),q(3,4) ;p.fun(q) ;q.fun(&q) ;改正程序中小的错误,给出程序运行的结果,并对程序进行分析。3、思考题:结合编程实践回答下列的问题。(1) 结合第一个例子,说明什么是类?什么是对象?你是如何理解类和对象的?(2) 面向对象的程序设计与结构化程序设计有何不同?(3) 拷贝构

10、造函数那些情况下会被调用,分别给出例子?(4) 实验3 this指针、常量和静态成员和友元函数的使用1、 实验目的和要求:(1) 掌握显式使用this指针的方法(2) 掌握静态数据成员的意义及使用方法(3) 掌握常量数据成员和常量成员函数的意义和使用方法(4) 掌握友元函数和友元类的使用方法2、 实验内容:(1)有如下类的定义。类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。(有两种方法即不用this 指针和用this指针)include class Myclass public: Myclass (int a,int b) x=a;y=b; void copy(Myclas

11、s & my);void print( ) cout“x=”xendl; cout”y=”yendl; private:int x,y; void main() Myclass my(10,20),t(30,40); my.print( );my. copy(t);my.print( );(2)设计一个类,实现两个复数的四则运算。实现加减乘除功能的函数用友元函数实现。 (3)分析下面程序,给出横线部分的语句,写出程序的输出结果并分析m_count的功能。 #include using namespace std; class A static int m_counter; public: A(

12、); A(); static void display(); /将m_counter初始化为0;A:A() m_counter+;A:A()m_counter-;void A:display() cout”There are:”A:m_counter”objects of class A.n”;int main() A a1; A a2; A a3; A:display(); a1.display();(4)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟

13、商店货物购进和卖出的情况。(本题目主要练习静态数据成员的使用,定义私有变量存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对象完成初始化的功能和删除对象时,从总重量和总价钱中减去对象的重量和价格)(5) 静态成员练习1) 编写一个类Node,声明一个数据成员member和已经静态成员count,另构造函数初始化数据成员,并把静态数据成员加1,另析构函数把静态数据成员减1。2) 在1)的基础上编写应用程序,创建3个对象,然后显示他们的数据成员和静态成员,再析构每个对象,并显示他们对静态数据成员的影响。3) 修改2),让静态成员函数访问静态数据成员,

14、并让静态数据成员是私有的。(6)两个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。如: class Intset private:int num3;public:Intset ( int x,int y, int z)/添加初始化内容void print( ) /打印数据 ; class floatset private:float num3;public:floatset ( float x,float y, float z)/添加初始化内容void print( ) /打印数据;(1) 在Intset中再增加一个成员函数,将对象的整型数据拷贝的到floats

15、et的对象中此成员函数的原型为:void settofloat(floatset &set); /形参为拷贝的目标对象(2)定义一个友元函数来实现上述的功能。请分别完成两个程序。(7) 分析以下程序的功能,把程序用三种方法(公有数据成员、友元、用成员函数访问私有数据成员)补充完整,实现对对象Animal的成员#include class Animal;void SetValue(Animal&, int);void SetValue(Animal&, int, int);class Animalpublic: Animal():itsWeight(0),itsAge(0) void show(

16、)coutitsWeightendlitsAgeendl;protected: int itsWeight; int itsAge;void SetValue(Animal& ta, int tw) / 设置itsWeight值void SetValue(Animal& ta, int tw, int tn) / 设置itsWeight和itsAge值int main() Animal peppy; SetValue(peppy, 5); peppy.show(); SetValue(peppy, 7, 9); peppy.show(); return 0;(8) 设计一个整数链表类,满足栈操

17、作。即,总在链表首插入结点,总在链表首取出(删除)结点。类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点操作,则类必须给出错误信息。编写应用程序,取100次随机数(范围10200),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。求和工作不要在链表类中完成,以使该链表类具有通用性。(9) 设计合适的类结构,完成多项式加、减、乘运算。3、思考题:结合编程实践回答下列的问题。(1) 什么是this指针,它的主要作用是什么?(2) 总结静态成员的特点。(3) 分别介绍co

18、nst修饰数据成员、函数成员、对象的作用。(4) 用合适的数据结构(给出类声明)描述下面的问题:一个老师可以有多个助教,每个助教可以辅导多名学生。实验4 运算符重载1、 实验目的和要求 (1) 掌握运算符重载的语法要点,理解成员函数与友元函数重载运算符的区别。(2) 掌握各种运算符的重载方法,理解引用形式作为参数和返回值的特点。2、 实验内容(1)定义描述平面点类Point,重载减号运算符计算两个点的距离,分别用成员函数与友元函数实现。重载运算符输出点的坐标x,y,给出类以及相关函数的定义。#include #include using namespace std;class Point pu

19、blic: Point( int a= 0, int b = 0 ):x(a),y(b) void setPoint( int a, int b ) x = a ; y = b ; . private: int x, y; / 平面坐标;int main() Point p1(2,1),p2;double d = p1-p2; /计算两点距离coutp1 p2 = d”、“ =” 和“=”,使之能够比较两个有理数。3)重载运算符“”,使其能以规范的方式输出分数,如1/2,-1/3,分母不能为0。(3)定义一个集合类Set,最多存放100个不重复的整数,实现集合的如下操作:1)增加某个整型元素时

20、,保证集合中没有重复元素;删除指定的元素,查找该元素在集合中则从集合中删除该元素;2)重载运算符“+”,实现两个集合对象的合并操作,重载运算符“*”,求两个集合对象的交集;例如Set s, s1, s2; s = s1+s2; s = s1* s2; 3)重载赋值运算符=和复合赋值运算符-= , 实现两个集合对象的赋值操作与差集操作。例如Set s1,s2;s1 = s2; s1-=s2; 集合S1中去掉S2中存在的元素。(4)定义描述时间的Time类,包括数据成员小时hour、分钟minute和秒second,定义相关函数实现如下操作:1)重载运算符“+”与“-”,能够实现时间对象与整数秒的

21、加减操作。2)重载运算符“”输出时间对象,能够按照“小时:分钟:秒”的方式显示时间。3)重载运算符“+”与“-”,要求能够实现时间的合理自增自减功能(秒数的增减)。(5)设计字符串类String,若有String类对象s1、s2和s3,重载运算符实现如下操作: 1)重载“”实现字符串连接功能,使表达式s1= s2+s3成立; 2)重载“”判断两个字符串的大小,如 if(s1 s2) couts1”s2;3)重载“”,实现字符串的输入与输出操作,如cins2; couts2endl;4)重载运算符“()”,从字符串对象中返回一个子串。如s1(2,4)表示返回从子串,即从s2(s1第3个字符)开始

22、的子串(包括s12、s13和s14三个字符)。 (6)【选作】开发多项式类Polynomial,多项式的每一项用数组或结构体表示,每项包含一个系数和一个指数。例如2x4的指数为4,系数为2。请开发一个完整的Polynomial类,包括构造函数、析构函数以及get函数和set函数。该类还要提供下述重载的运算符:1)重载运算符“+”和“-”,将两个多项式相加或相减。2)重载乘法运算符“*”,将两个多项式相乘。3)重载赋值运算符“=”,将一个多项式赋给另外一个多项式。实验5 派生与继承1、 实验目的和要求: 此实验用两个单元的时间完成,是一个综合性的实验,要求编写的程序涉及到C+的许多知识点,如类的

23、定义,动态分配内存,构造函数,派生,虚基类等。实验内容给出的是一个完整的程序,4个题目实际是类等级。同学也可以在此基础上发挥增加新的内容。2、 实验内容:1. 定义一个基类MyArray,基类中可以存放一组数组。Class Myarray int *alist; int length;public: Myarray( int leng); myarray(); void input(); void display();编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。2定义一个类averarray继承自myarray,在类中求数组的平均值,并输出。进

24、行调试。3定义一个类revarray继承自 myarray, 使数组按反序存放,并输出。进行调试。4. 定义一个类Nawarray继承自averarray和revarray。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。5. 读程序,回答问题#include using namespace std;class Apublic: void f1(); A() i1=10;j1=11;protected: int j1;private: int i1;class B:private Apublic: void f2(); B() i2=20

25、;j2=21;protected: int j2;private: int i2;class C: public Bpublic: void f3(); C() i3=30;j3=31;protected: int j3;private: int i3;回答下列问题:(1) 派生类B中成员函数f2()能否访问基类A中的成员f1()、i1和j1?(2) 派生类B的对象b能否访问基类A中的成员f1()、i1和j1?(3) 派生类C中成员函数f3()能否访问直接基类B中的成员f2()、i2和j2?能否访问间接基类A中的成员f1()、j1和i1?(4) 派生类C的对象c能否访问直接基类B中的成员f2(

26、)、i2和j2?能否访问间接基类A中的成员f1()、j1和i1?6. 编写一个程序,实现字符串操作: 一个简单串类string,包含输入字符串、返回字符串长度及内容等功能; 另有一个具有编辑功能的串类edit_string,它继承string类,在其中设置一个光标,使其能支持在光标处的插入、替换和删除等编辑功能。实验6 多态性1.实验目的和要求:(1)理解多态性、虚拟函数、抽象类和具体类、静态绑定和动态绑定等概念(2)学会利用虚函数来实现多态性,以便更好地来扩展和维护系统(3)理解C+如何实现虚拟函数和动态绑定(*)2.实验内容:(1) 以下是一个计算正方体、球体和圆柱体的面积和体积的程序。试

27、分析程序并写出程序的运行结果,然后上机运行验证。#includeclass containerprotected:double radius;public:container(double radius)container:radius=radius;virtual double surface_area()=0;virtual double volume()=0;class cube:public containerpublic:cube(double radius):container(radius);double surface_area()return radius*radius*6;

28、double volume()return radius*radius*radius;class sphere:public containerpublic:sphere(double radius):container(radius);double surface_area()return 4*3.1416*radius*radius;double volume()return 3.1416*radius*radius*radius*4/3;class cylinder:public containerdouble height;public:cylinder(double radius,double height):container(radius)cylinder:height=height;double surface_area()

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2