内蒙古科技大学面向对象的程序设计实验3 函数

合集下载

C++语言程序设计实验3(函数)

C++语言程序设计实验3(函数)

实验3 函数在面向过程的传统程序设计中,函数是程序模块的最小单位。

而在面向对象的程序设计中,虽然程序的模块化思想被体现的更加淋漓尽致,但是函数仍然是描述解决问题方法的一个重要手段,因为类的功能的抽象结果仍要以函数(成员函数)的形式表现出来。

因此,学好函数对掌握类的成员函数是至关重要的。

首先,应该通过函数的定义和调用掌握功能分解的思想。

其次,培养自己编程解决小问题的能力,主要是掌握累加、累乘算法,数据交互算法和递归算法。

再次,了解形参和实参的本质及其关系。

最后,掌握函数的调用机制。

对于函数,可以先从数学中函数的概念入手,引申为程序中完成数学计算的函数,进而再将函数的概念拓展为程序功能模块。

1.函数的定义和调用(1) 函数的声明格式类型标识符 函数名(形式参数表){语句序列}其中:¾类型标识符是指函数的返回值类型,函数体内通常要有return语句;¾如果没有返回值,类型标识符为void;¾函数名按照标识符的命名方式命名;¾形参列表的格式为:type1 name1, type2 name2, ……, typen namen;¾如果没有形参,则在形参列表出加void。

(2) 函数的调用函数的调用过程如图1所示:图1 子函数调用过程函数调用前要先声明函数原型,格式为:类型标识符 函数名(形式参数表);函数的调用格式为:函数名(实参列表)函数可以嵌套调用:函数可以嵌套调用,但不允许嵌套定义。

函数可以递归调用:函数直接或间接调用自身。

(3) 函数的参数传递机制如果函数在定义时有形参,则调用该函数时要赋予实参。

在函数被调用时才分配形参的存储单元。

实参可以是常量、变量或表达式。

实参与形参在个数上、类型上必须对应相符。

有两种传递方式:○1值传递:传递时只传递参数值,即单向传递。

○2用引用做形参:把形参定义成引用型。

值传递时是单向的,只把实参的结果对应传递给形参,对形参的改变不会反映到实参中,所以这种传递方式也叫单向传递;而引用相当于给实参起了一个别名,形参和实参此时共享内存存储单元,对形参的改变将会反映给实参,所以这种传递方式也叫双向传递。

12软件工程面向对象程序设计(C++) 实验3多态性指导书

12软件工程面向对象程序设计(C++) 实验3多态性指导书

实验3 多态性3.1实验目的和要求(1) 了解多态性的概念。

(2) 掌握运算符重载的基本方法。

(3) 掌握虚函数的定义和使用方法。

(4) 掌握纯虚函数和抽象类的概念和用法。

3.2实验内容与步骤一、构建一个复数类Complex,试对下列几个运算符进行重载:++,=,!=,+,-,==,其中要求要有成员重载形式和友元重载形式,而且,++运算符要求实现先加和后加两种形式。

该类定义原型说明:class complex{public:complex(double r=0,double i=0);complex &operator +(complex &c);complex operator -(complex &c);complex operator *(complex &c);friend complex operator /(complex &c1,complex &c2);friend int operator ==(complex &c1,complex &c2);friend int operator !=(complex &c1,complex &c2);//friend complex operator++(complex &c);complex operator++();complex operator++(int);void disp();private:double real;double imag;};二、建立一个分数类Fraction。

分数类的数据成员包括分子和分母。

成员函数包括构造函数、复制构造函数。

构造函数要对初始化数据进行必要的检查(分母不能为0)。

将分数显示成“a/b”形式的输出函数。

成员函数包括约分、通分、加、减、乘、除、求倒数、比较大小、显示和输入。

完成以上所有成员函数并在主函数中进行检验。

内蒙古科技大学课程设计说明书

内蒙古科技大学课程设计说明书

内蒙古科技大学课程设计说明书C++设计报告班级:08电信一班姓名:赵同景学号:0867118135一、前言……………………………………………………二、程序功能介绍…………………………………………三、类设计………………………………………………….四、程序流程图…………………………………………….五、源程序…………………………………………………六、调试及运行结果………………………………………七、重点难点体会参考文献……………………………………………………前言:此程序使用C++语言设计,运行软件选择Microsoft Visual C++6.0。

计算机系统环境为windows XP。

一、程序功能介绍此程序主要功能可分为6个模块:①输入功能②查询功能③按价格排序④显示信息⑤退出系统所有功能模块均设计为car类或者manage的成员函数,通过switch 函数选择语句调用不同的成员函数而实现各个功能,switch 中的选项输错时自动返回重新输入通过manage类中的成员函数对系统进行管理;二、类设计本程序中只含有2个类,即car和manage在主程序中用manage类定义一个对象a,通过此对象调用各模块对系统的各成员函数进行调用,以此实现各个功能Car类所包含的成员:私有成员:1.carname字符数组//用于储存汽车名2.numberr长整型数据//用于储存汽车型号公有成员:price 双精度数据//用于储存汽车价格1.getcar()函数//用于将存于内存中的信息保存到文件中2.display ()函数//用于添加新的联系人manage 类包含的成员:私有成员:1:choice2:ncar公有成员:manage()//构造函数为ncar赋初值dismenu()//管理菜单input()//为系统输入信息output()//输出查询信息showall()//显示信息run()//为系统选择所要调用的函数sort()//为系统排序car cars[50]三、程序流程图五.源程序代码#include<iostream.h> #include<string.h> class car{public:void getcar(char * cn ,long num,double p)//记录输入{strcpy(carname,cn);number=num;price=p; }void display();double price; //价格private:char carname[20]; //汽车名long number; //型号};void car::display(){cout<<"汽车名:"<<carname<<"型号:"<<number<<"价格:"<<price<<endl;}class manage//管理功能{public:manage(){ncar=1;}void dispMenu();void sort();void input();void output();void showall();void run();car cars[50];private:int choice;int ncar;};void manage::dispMenu()//管理菜单{cout<<"===========车辆管理系统=========="<<endl;cout<<"1.输入记录"<<endl;cout<<"2.查询记录"<<endl;cout<<"3.按价格排序"<<endl;cout<<"4.显示信息"<<endl;cout<<"5.退出"<<endl;cout<<"输入选项(1—5):";cin>>choice;}void manage::input()//输入功能{char carname[20];long number;double price; cout<<"输入汽车名字:";cin>>carname;cout<<"输入型号:";cin>>number;cout<<"输入价格:";cin>>price;cars[ncar].getcar(carname,number,price); ncar++;}void manage::output()//输出查询信息{ int a;cout<<"显示第几号数据(1~10):";cin>>a;cars[a].display();}void manage::sort()//排序功能{car temp;for(int j=1;j<ncar;j++)for(int k=j;k<ncar;k++)if(cars[j].price<cars[k].price) {temp=cars[j];cars[j]=cars[k];cars[k]=temp;}showall();}void manage::showall() {for(int j=1;j<ncar;j++) cars[j].display();}void manage::run(){do{dispMenu();switch(choice){case 1:input();break;case 2:output();break;case 3:sort();break;case 4:showall();break;}} while(choice!=5);}int main(){manage a;a.run();return 0;}六.调试及运行结果程序运行调用dismenu()函数打印菜单,如图6-1.图6-1选择1系统运行输入功能,,如图6-2图6-2选择2,运行查询记录功能模块,如图6-3。

内蒙古科技大学面向对象的程序设计实验十一 多态(二)

内蒙古科技大学面向对象的程序设计实验十一 多态(二)

内蒙古科技大学面向对象的程序设计实验报告一、实验目的1.理解掌握运算符[]、()的重载;2.理解类型转换,掌握类型转换函数的设计和使用;3.理解和掌握虚函数的作用;4.掌握利用虚函数实现C++的运行时多态性;5.理解纯虚类和抽象类。

二、实验环境编译器:Visual C++ 6.0.操作系统:Windows 7 旗舰版三、实验内容2.1练习(一):1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include <iostream.h>#include "stdlib.h"class CComplex{public:CComplex(double r = 0, double i = 0){real = r;imag = i;}int operator int(){return (int)real;}void Display(void){cout << "(" << real << "," << imag << ")" << endl;}protected:double real;double imag;};class CVector{public:CVector(CComplex &obj1, CComplex &obj2, CComplex &obj3, CComplex &obj4) {objArray[0] = obj1;objArray[1] = obj2;objArray[2] = obj3;objArray[3] = obj4;}friend CComplex &operator[](CVector obj, int n);private:CComplex objArray[4];};CComplex &operator[](CVector obj, int n){if(n<0 || n>3){cout<<"Out of range!"<<endl;exit(0);}return obj.objArray[n];}void main(){CComplex c1(1.1, 1.1);CComplex c2(2.2, 2.2);CComplex c3(3.3, 3.3);CComplex c4(4.4, 4.4);CVector v(c1,c2,c3,c4);v[0].Display();v[1].Display();v[2].Display();v[3].Display();v[0] = 5.5; //----------------------------------------------------------①v[1] = CComplex(6.6); //-------------------------------------------②v[2] = int(CComplex(7.7)); //--------------------------------------③v[3] = int(CComplex(8.8,9.9)); //----------------------------------④v[0].Display();v[1].Display();v[2].Display();v[3].Display();}问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。

面向对象程序设计实验

面向对象程序设计实验

For personal use only in study and research;not for commercial use实验一C++基础1.1 实验目的1.了解并熟悉开发环境,学会调试程序;2.熟悉C++中简单的标准输入输出函数的使用方法;3.理解const修饰符的作用并学会应用;4.理解内联函数的优缺点并学会其使用场合;5.理解并学会函数重载;6.理解并熟练掌握使用new和delete来分配内存;7.理解并熟练掌握引用的使用方法。

1.2 实验内容1.2.1 程序阅读1.理解下面的程序并运行,然后回答问题。

#include <iostream.h>int max_def(int x, int y){return (x>y?x:y);}int max_def(int x, int y, int z){int temp = 0;return (temp=(x>y?x:y))>z?temp:z;}double max_def(double x, double y){return (x>y?x:y);}int main(){int x1 = 0;int x2 = 0;double d1 = 0.0;double d2 = 0.0;x1 = max_def(5,6);x2 = max_def(2,3,4);d1 = max_def(2.1,5.6);d2 = max_def(12.3,3.4,7.8);-----------------------------------------------------①cout<<"x1="<<x1<<endl;cout<<"x2="<<x2<<endl;cout<<"d1="<<d1<<endl;cout<<"d2="<<d2<<endl;--------------------------------------------------------②return 1;}问题一:上述程序的输出结果是什么?问题二:用的是哪个函数?答:调用的函数是int max_def(int x, int y, int z){int temp = 0;return (temp=(x>y?x:y))>z?temp:z;}问题三:②处的输出结果为什么是d2=12,而不是d2=12.3?答:因为①处调用的是整型函数,d2在此函数中被转换为整型,小数点后面被删除。

实验10-多态(一)

实验10-多态(一)
②处因为此函数是类内的成员函数,有一个隐含的this指针,所以只需一个参数就可以。
试验二:
第一个错误:
如果重载+运算符且函数有两个参数,则只能声明为类的友元函数,不能声明为类的成员函数。
第二个错误:
重载单目运算符++为类的成员函数,不需要参数。因为它的操作数是函数调用者。
第三个错误:
单目运算符—函数没有在类内声明,如果想要传参,则必须将此函数声明为类的友元函数。




(由学


写)
实验一:
问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?
问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?
回答:①处obj = obj1+obj2;相当于obj=obj1.operator+(obj2),因为obj是CComplex类型,而返回值正是obj所以返回值要设计成CComplex类型。
4、实验报告电子版由教务处网站服务器保存。
5、表格宽度可以根据实际情况伸缩。
CComplex obj3= obj1+obj2;
CComplex obj4(100,30);
CComplex obj5(100,30);
obj3.print1();
cout<<"obj4后置++以后:";
(obj4++).print2();
cout<<"obj4后置--以后:";
(obj4--).print2();

内蒙古科技大学面向对象的程序设计实验4 类和对象(一)

内蒙古科技大学面向对象的程序设计实验4 类和对象(一)

内蒙古科技大学面向对象的程序设计实验报告一、实验目的(1) 掌握声明类的方法,类和类的成员的概念以及定义对象的方法。

(2) 初步掌握用类和对象编制基于对象的程序。

(3) 学习检查和调试基于对象的程序。

二、实验环境编译器:Visual C++ 6.0.操作系统:Windows 7 旗舰版三、实验内容2.1练习(一):1. 新建一个项目。

2. 输入以下程序:#include <iostream>using namespace std;class Time{public: int hour; int minute; int sec;};int main(){Time t1;cin >> t1.hour;cin >> t1.minute;cin >> t1.sec;cout << t1.hour << “:”<< t1.minute << “:” << t1.sec <<endl;return 0;}3. 按要求编写程序,生成后执行,并分析输出的信息。

按要求改写程序:1. 将数据成员改为私有的;2. 将输入输出的功能改为由成员函数实现;3. 在类体内定义成员函数。

4. 编译和运行程序。

请分析什么成员应指定为公用的?什么成员应指定为私有的?什么函数最好放在类中定义?什么函数最好放在类外定义?2.2练习(二):1. 新建一个项目。

2. 在项目中,添加头文件student.h,并输入以下代码。

class Student{public:void display();private:int num; char name[20];char sex;};3. 在项目中,添加源文件student.cpp,包含成员函数定义。

#include <iostream>#include “student.h”void Student::display(){cout << “num:” << num << endl;cout << “name:” << name << endl;cout << “sex:” << sex << endl;}4. 在包含主函数的源文件main.cpp,添加如下代码。

内蒙古科技大学面向对象的程序设计实验9 继承(二)

内蒙古科技大学面向对象的程序设计实验9 继承(二)

内蒙古科技大学面向对象的程序设计实验报告一、实验目的1.理解多重派生的定义;2.理解多重派生中构造函数与析构函数的调用顺序;3.理解多重派生中虚拟基类的作用;二、实验环境编译器:Visual C++ 6.0.操作系统:Windows 7 旗舰版三、实验内容2.1练习(一):1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

class CBase1{public:CBase1(int a):a(a){cout<<"base1 structure..."<<endl;}~CBase1(){cout<<"base1 destructure..."<<endl;}void print(){cout<<"a="<<a<<endl;}protected:int a;};class CBase2{public:CBase2(int b):b(b){cout<<"base2 structure..."<<endl;}~CBase2(){cout<<"base2 destructure..."<<endl;}void print(){cout<<"b="<<b<<endl;}protected:int b;};class CDerive : public CBase1, public CBase2{public:CDerive(){cout<<"derive structure..."<<endl;}~CDerive(){cout<<"derive destructure..."<<endl;}void print(){CBase1::print();CBase2::print();b1.print();b2.print();cout<<"c="<<c<<endl;}private:CBase1 b1;CBase2 b2;int c;};void main(){CDerive d;d.print();}问题一:改正以上程序中存在的错误,并分析该程序的输出结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内蒙古科技大学
面向对象的程序设计
实验报告
一、实验目的
(1)掌握定义函数的方法、函数实参与形参的对应关系以及“值传递”的方式。

(2)掌握引用做函数参数的方法。

(3)理解和使用函数重载以及带默认参数的函数。

二、实验环境
编译器:Visual C++ 6.0.
操作系统:Windows 7旗舰版
三、实验内容
2.1 练习(一):
通过下面的步骤实现函数功能:
1. 写一个判别素数的子函数prime,在主函数输入一个整数,输出是否为素数的信息。

2. 按要求编写程序,生成后执行,并分析输出的信息。

要求:
使用cin语句分别输入以下测试数据:17,34,2,1,0。

分别运行并检查结果是否正确。

2.2 练习(二):
1.设计一个函数:exchange(float x, float y, float z),当调用
exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。

2. 使用函数重载的方法定义两个重名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,如果没有输入第二点的坐标则采用函数缺省参数的方法默认为圆点(0,0)。

四、实验过程
练习3-1.1
运行结果如下
运行结果为34,0,1不是素数,17和2是素数,与实际情况无误,运行结果正确
练习3-2.1
代码截图如下
原设置a=1.1 b=22.2 c=333.3
变化之后a=333.3 b=1.1 c=22.2运行结果无误
练习3-2.2
源代码截图如下
测试数据结果如下
五、实验总结实验源代码:
练习(一)
#include<iostream.h> void prime(int x);
void main()
{
int n;
while(1)
{
cout<<"请输入n:";
cin>>n;
prime(n);
}
}
void prime(int x)
{
if(x==0||x==1)
cout<<x<<" is no prime"<<endl;
else
{
int i=2;
while(i<x)
{
if(x%i==0)
break;
i++;
}
if(i==x)
cout<<x<<" is prime"<<endl;
else
cout<<x<<" is no prime"<<endl;
}
}
练习(二)
#include<iostream.h>
void exchange(float &x,float &y,float &z); void main()
{
float a=1.1,b=22.2,c=333.3;
cout<<"调用exchange之前"<<endl;
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
cout<<"c:"<<c<<endl;
exchange(a,b,c);
cout<<"调用exchange之后"<<endl;
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
cout<<"c:"<<c<<endl;
}
void exchange(float &x,float &y,float &z) {
float cache;
cache=y;
y=x;
x=z;
z=cache;
}
练习(三)
#include <iostream.h>
#include <math.h>
int distance(int x1,int y1,int x2=0,int y2=0)
{
cout<<"调用int distance"<<endl;
int dis=sqrt((int)(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return dis;
}
double distance(double x11,double y11,double x22=0.0,double y22=0.0) {
cout<<"调用double distance"<<endl;
double dis=sqrt((int)(x11-x22)*(x11-x22)+(y11-y22)*(y11-y22));
return dis;
}
void main()
{
int x1,y1,x2=0,y2=0;
int i;
double x11,y11,x22,y22;
char c;
cout<<"请输入整形平面第一点的横坐标与纵坐标:"<<endl;
cin>>x1>>y1;
cout<<"是否输入整形平面第二点的横坐标与纵坐标? ’Y’确定,否则跳过"<<endl;
cin>>c;
if(c==’Y’||c==’y’)
{
cout<<"请输入整形平面第二点的横坐标与纵坐标:"<<endl;
cin>>x2>>y2;
}
cout<<endl;
cout<<"请输入双精度平面第一点的横坐标与纵坐标:"<<endl;
cin>>x11>>y11;
cout<<"是否输入双精度平面第二点的横坐标与纵坐标? ’Y’确定,否则跳过"<<endl;
cin>>c;
if(c==’Y’||c==’y’)
{。

相关文档
最新文档