C++面向对象程序设计实验指导_第1页
C++面向对象程序设计实验指导_第2页
C++面向对象程序设计实验指导_第3页
C++面向对象程序设计实验指导_第4页
C++面向对象程序设计实验指导_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+痼向对象程序设计实验指导书(第三版)(适用于理工科)学号:姓名:班级:指导老师:计算机系2019年7月一、实验目的和要求1 .熟悉VS2015的集成开发环境;2 .学会使用VS2015编辑、编译、连接和运行 C+®序;3 .通过运行简单的C+E序,初步了解C+硼程序的结构和特点;4 . 学会使用简单的输入输出操作。二、实验内容1. 编辑、编译、连接和运行以下的 C+取序#include<iostream>using namespace std;int main()cout<<"Hello!n"cout<<"This

2、 is a program."<<endl;return 0;2. 编译下列程序,改正所出现的错误信息,并写出输出结果。(1)#include<iostream>using namespace std;int main()cin>>a;int b=3*a;cout<<"b=<<b<<n"return 0;(2)int main()cout<<"Hello!n"cout<<"Welcome to C+!"(3)#include<

3、;iostream>using namespace std;int main()int x,y;x=5;y=6;int z=x*y;cout<<"x*y="<<z<<endl;return 0;3. 请填空完成以下程序,并上机调试正确,写出运行结果。#include<iostream>using namespace std;int add(int a,int b);int main()int x,y,sum;cout<<"Enter two numbers: ” <<n;/在下划线处填上

4、语句,完成用 cin读入x和ysum=add(x,y);cout<<” The sum is: ” <<sum<< nreturn 0;int add(int a,int b)/ 在下划线处填上语句,完成计算a与b的和并返回之实验 2 C+ 简单程序设计练习一、实验目的和要求1 .进一步熟悉VS2015的集成开发环境。2 .进一步熟悉使用VS2015编辑、编译、连接和运行 C+?序;3 .进一步熟悉C+取序的结构和编程方法;4 .了解C+软非面向对象方面对C功能的扩充与增强。二、实验内容1.编辑、编译、连接和运行以下 C十卷文件程序。1. ) #includ

5、e <iostream>using namespacestd;int add( int a, int b);int main()int x, y, sum;cout << "Enter tow numbers:" << endl;cin >> x;cin >> y;sum = add(x, y);cout << "The sum is:" << sum << endl;return 0;int add( int a, int b)int c;c = a + b

6、;return c;2. 输入以下程序,进行编译,如果有错误,请修改程序,直到没有错误,然后进 行连接和运行,并分析运行结果。#include <iostream> using namespacestd;int main()void fun( int , int &);int x, y;fun(3, x);fun(4, y);cout << "x+y=<<x+y << endl;return 0;void fun( int m, int &n)n = m* 53. 编写一个程序,用来分别求2 个整数、 3 个整数、 2

7、个双精度数和3 个双精度数的最大值。要求使用重载函数来完成。4. 编写一个程序,任意从键盘输入两个字符,能将它们按由大到小的顺序输出。要求程序中有个交换两个字符的函数,其形参是变量的引用。5. 编写一个程序,对一个整型数组的元素求和,结果使用全局变量sum存储,另 外对数组元素中的奇数求和,结果使用局部变量sum存储,在主程序中将两个结 果输出。(本题要求体会和理解作用域运算符的概念与基本使用方法)。6. 编写一个程序,声明一个双精度型指针变量,使用运算符new 动态分配一个double 型存储区,将首地址赋给该指针变量,并输入一个数到该存储区中。计算以该数为半径的圆的面积,并在屏幕上显示出来

8、,最后使用运算符delete 释放该空间。实验 3 类和对象(一)、实验目的和要求1. 理解类和对象的概念,掌握声明类和对象的方法;2. 掌握构造函数和析构函数的实现方法;3. 初步掌握使用类和对象编制C+刑序;4. 掌握对象数组、对象指针和string 类的使用方法;5. 掌握使用对象、对象指针和对象引用作为函数参数的方法;6. 掌握类对象作为成员的使用方法;7. 掌握静态数据成员和静态成员函数的使用方法;8. 理解友元的概念和掌握友元的使用方法。二、实验内容1. 输入下列程序。#include <iostream>using namespacestd;class Coordin

9、atepublic :Coordinate( int x1, int y1)x = x1;y = y1;Coordinate( Coordinate &p);Coordinate()cout << "Destructor is callededn" ;int getx()return x;int gety()return y;private :int x, y; Coordinate :Coordinate( Coordinate &p)x = p.x;y = p.y;cout << "Copy-initialization

10、 Constructor is calledn" int main()Coordinate p1(3, 4);Coordinate p2(p1);Coordinate p3 = p2;cout << "p3=(" << p3.getx() << "," << p3.gety() << ")n" ; return 0;( 1) 写出程序的运行结果;( 2) 将Coordinate 类中带有两个参数的构造函数进行修改,在函数体内增添下述语句: Cout<<”

11、 Constructor is Called.n ” ;写出程序的运行结果,并解释输出结果。( 3) 按下列要求进行调试:在主函数体内,添加下列语句:Coordinate p4;Coordinate p5(2);调试程序时会出现什么错误?为什么?如何对已有的构造函数进行适当修改?( 4) 经过以上第(2)步和第(3)步的修改后,结合运行结果分析:创建不同的对象时会调用不同的构造函数。2. 设计一个4*4 魔方程序,让魔方的各行值的和等于各列值的和,并且等于两对角线值得和。例如以下魔方:31 3 5 259 21 19 1517 13 11 237 27 29 1各行、各列以及两对角线值的和都是

12、64。【提示】求 4*4 魔方的一般步骤如下:( 1) 设置初始魔方的起始值和相邻元素之间的差值。例如上述魔方的初始魔方的起始值(first )和相邻元素之间的差值(step )分别为:first=1;step=2;( 2) 设置初始魔方元素的值。例如上述魔方的初始魔方为:1 3 5 79 11 13 1517 19 21 2325 27 29 31( 3) 生成最终魔方。方法如下:最大元素值与最小元素值的和sum,该实例的sum是:1+31=32 用 32 减去初始魔方所有对角线上元素的值,然后将结果放在原来的位置,这样就可求得最终魔方。本题的魔方类magic 的参考框架如下:Class m

13、agic public:void getdata();void setfirstmagic();void generatemagic();void printmagic();private:int m44;int step;int first;int sum;实验 4 类和对象(二)、实验目的和要求1. 理解类和对象的概念,掌握声明类和对象的方法;2. 掌握构造函数和析构函数的实现方法;3. 初步掌握使用类和对象编制C+刑序;4. 掌握对象数组、对象指针和string 类的使用方法;5. 掌握使用对象、对象指针和对象引用作为函数参数的方法;6. 掌握类对象作为成员的使用方法;7. 掌握静态数据

14、成员和静态成员函数的使用方法;8. 理解友元的概念和掌握友元的使用方法。二、实验内容1. 设计一个用来表示直角坐标系的Location 类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别 采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:A(x1,y1),B(x2,y2)Distancel=d1Distancel=d2其中:x1,y1,x2,y2为指定的坐标值,di和d2为两个坐标点之间的距离。【提示】类 Location 的参考框架如下: class Locationpublic:Location(double

15、,double);double Getx() double Gety() double distance(Location &);friend double distance(Location &,Location &);private:double x,y;2. 声明一个Student 类,在该类中包括一个数据成员score( 分数 )、两个静态数据成员 total_score( 总分 ) 和 count( 学生人数): 还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员

16、函数average() 用于求全班成绩的平均值。在main 函数中,输入某班同学的成绩,并调用上述函数求出全班学生的成绩之和和平均分。3. 使用C+勺string 类,将5个字符串按逆转转后的顺序显示出来。例如,逆转前的 5 个字符串是:Germany Japan America Britain France按逆转后的顺序输出字符串是:France Britain America Japan Germany实验 5 类的继承与派生 一、实验目的和要求1. 掌握派生类的声明和派生类构造函数的定义方法;2. 掌握不同继承方式下,基类成员在派生类中的访问属性;3. 掌握在继承方式下,构造函数与析构函

17、数的执行顺序与构造规则;4. 学习虚基类在解决二义性问题中的作用。二、实验内容1. 输入下列程序。#include <iostream>using namespacestd;class Basepublic :void setx( int i )x = i;int getx() return x;public :int x;class Derived : public Base public :void sety( int i )y = i;int gety()return y;void show()cout << "Base:x=" <<

18、; x << endl;public :int y;int main()Derived bb;bb.setx(16);bb.sety(25);bb.show();cout << "Base:x=" << bb.x << endl;cout << "Derived:y=" << bb.y << endl;cout << "Base:x=" << bb.getx() << endl;cout << "

19、;Derived:y=" << bb.gety() << endl;return 0;( 1) 写出程序的运行结果。( 2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。 将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?将基类Base中数据成员x的访问权限改为protected时,会出现哪些 错误?为什么? 在原程序的基础上,将派生类Derived 的继承方式改为private 时,会出现哪些错误?为什么? 在原程序的基础上,将派生类Derived 的继承方式改为protected 时,会出现哪些错误?为什么?2

20、. 编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person, 并作为学生类Student 和教师类Teacher 的基类。【提示】class Person;class Student:public Person.;class Teacher:public Person .;3. 按要求阅读、编辑、编译、调试和运行以下程序。( 1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。#include <iostream>#include

21、 <string>using namespacestd;class MyArray public :MyArray( int leng );MyArray();void Input();void Display( string );protected :int *alist;int length;MyArray:MyArray( int leng )if ( leng <= 0) cout << "error length" ;exit(1);alist = new int leng;length = leng ;if (alist= NULL

22、)cout << "assign failure" ;exit(1);cout << "Myarray 类对象已创建。" << endl;MyArray:MyArray()delete alist;cout << "MyArray 类对象被撤销。"<< endl;void MyArray:Display( string str )int i;int *p = alist;cout <<str << length << " 个整数:

23、for (i = 0; i < length; i+, p+) cout << *p << " " ;cout << endl;void MyArray:Input()cout << "请从键盘输入" << length << " 个整数:" ;int i;int *p = alist;for (i = 0; i < length; i+, p+) cin >> *p;int main()MyArray a(5);a.Input();a.D

24、isplay( " 显示已输入的");return 0;( 2)声明一个类SortArray 继承类 MyArray, 在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。【提示】在第( 1)步的基础上可增加下面的参考框架:class SortArray : public MyArray public :void Sort();SortArray( int leng ): MyArray( leng )cout << "SortArray 类对象已创建。" << endl;virtual SortArray();Sort

25、Array :SortArray() cout << "SortArray 类对象被撤销。" << endl;void SortArray :Sort()/ 请自行编写Sort 函数代码,将输入的整数从小到大排序。/ 并将主函数修改为:int main()SortArray s(5);s.Input();s.Display( "显示排序以前的" );s.Sort();s.Display( "显示排序以后的" );return 0;(3)声明一个类ReArray继承MyArray,在该类中定义一个函数,具有将输入

26、 的整数进行倒置的功能。【提示】在第( 1)步的基础上可增加下面的参考框架:class ReArray : public MyArray public :void Reverse();ReArray( int leng );virtual ReArray();请读者自行编写构造函数、析构函数和倒置函数ReArray,以及修改主函数。(4)声明一个类 AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。【提示】在第(1)步的基础上增加下面的参考框架:class AverArray : public MyArray public :AverArray( in

27、t leng );AverArray();double Aver();请自行编写构造函数、析构函数和求平均值的函数Aver,以及修改主函数.(5)声明一个 NewArray 类,同时继承了类 SortArray , ReArray 和 AverArray , 使得类NewArray的对象同时具有排列、倒置和求平均值的功能。在继承的过程中声明 MyArray 为虚基类,体会虚基类在解决二义性问题中的作用。实验6多态性与虚函数(一)一、实验目的和要求1 .了解多态性的概念;2 .掌握运算符重载的基本方法;3 .掌握虚函数的定义和使用方法;4 .掌握纯虚函数和抽象类的概念和用法。二、实验内容1 .分

28、析并调试下列程序,写成程序的输出结果,并解释输出结果#include <iostream>using namespacestd;class B public :virtual void f1( double x)cout << "B:f2(double)" << 2 * x << endl;void f2( double x)cout << "B:f2(double)" << 2* x << endl;void f3( double x)cout << &qu

29、ot;B:f3(double)" << 3 * x << endl;;class D public Bpublic :virtual void f1( double x)cout << "D:f1(double)" << x << endl;void f2( double x)cout << "D:f2(double)" << 2* x << endl;void f3( double x)cout << "D:f3(double

30、)" << 3 * x << endl;;int main()D d;B *pb = &d;D *pd = &d;pb->f1(1.23);pd->f1(1.23);pb->f2(1.23);pb->f3(1.23);pd->f3(3.14);return 0;2 .给出下面的抽象基类container:class container protected :double radius;public :container( double radiusl);virtualdouble surface_area() =

31、0;virtualdouble volume() = 0;;要求建立3个继承container 的派生类cube、sphere与cylinder ,让每一个派 生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和 圆柱体的表面积及体积。要求写出主程序,应用C+勺多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面 积和体积。实验7多态性与虚函数(二)一、实验目的和要求1 .了解多态性的概念;2 .掌握运算符重载的基本方法;3 .掌握虚函数的定义和使用方法;4 .掌握纯虚函数和抽象类的概念和用法。二、实验内容1

32、 .编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“ 十”实现两个时间的相加。要求将小时范围限制在大于 等于0分钟范围限制在0-59分,秒钟范围限制在0-59秒。【提示】时间类Time的参考框架如下:class Time public :Time(int h = 0, int m = 0, int s = 0);Time operator+ (Time &);void disptime( string ); private :int hours;int minutes;int seconds;2 .编写一个程序,用于进行集合的并、差和交运算。

33、例如输入整数集合9 5 4 36 7和2 4 6 9,计算出它们进行集合的并、差和交运算后的结果。【提示】(1)可用以下表达式实现整数集合的基本运算:s1+s2两个整数集合的并运算s1-s2两个整数集合的差运算s1*s2两个整数集合的交运算( 2)参考以下Set 类的框架,用于完成集合基本运算所需的各项功能。class Setpublic:Set:Set();void Set:input(int d);/向集合中添加一个元素int Set:length();/ 返回集合中元素的个数int Set:getd(int i);/ 返回集合中位置i 的元素void Set:disp();/ 输出集合的

34、所有元素Set Set:operator+(Set s1);/Set Set:operator-(Set s1);/Set Set:operator*(Set s1);/Set Set:operator=(Set s1);/成员运算符重载函数,实现两集合的并运成员运算符重载函数,实现两集合的差运成员运算符重载函数,实现两集合的交运成员运算符重载函数,实现两集合的赋值运算protected:int len;/ 统计集合中元素的个数int sMAX;/ 存放集合中的元素;实验 8 模板与异常处理一、实验目的和要求1. 正确理解模板的概念;2. 掌握函数模板和类模板的声明和使用方法;3. 学习简单的

35、异常处理方法。二、实验内容1. 分析并调试下列程序,写出运行结果并分析原因。( 1) #include<iostream>using namespace std;template<typename T>T max(T x,T y) /函数模板return x>y?x:y;int max(int a,int b) /非函数模板return a>b?a:b;double max(double a,double b) / 非函数模板return a>b?a:b;int main()cout<<"max('3','

36、7') is "<<max('3','7') <<endl;return 0;( 2) #include<iostream>非函数模板using namespace std; int max(int a,int b) / return a>b?a:b;double max(double a,double b) / 非函数模板return a>b?a:b;int main()cout<<"max('3','7') is "<<

37、;max('3','7') <<endl;return 0;2. 编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。3. 编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。【提示】设计一个类模板Template<class Type>class Array;具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int 型和 double 型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。4. 编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。实验 9 输入 / 输出流一、 实验目的和要求1. 掌握C+瘠式化的输入输出方法;2. 掌握重载运算符“<<”和“>>”的方法;3. 掌握磁盘文件的输入输出方法。二、实验内容1. 下面给出的程序用于打印九九乘法表,但程序中存在错误。请上机调试,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论