《面向对象程序设计》实验指导书 下载本文

实验一 熟悉VC++IDE开发环境

一、实验目的

1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。

2、掌握如何编辑、编译、连接和运行一个C++程序。

3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。

二、实验要求

1、分析下列程序运行的结果。 程序一:

#include int add(int x,int y=8); void main() { int x=4; } {

cout<

cout<

int add(int x,int y)

return x+y; }

程序二:

#include void main() { int *p,i; i=5;

p=&i; i=*p+10;

cout<<\}

程序三:

#include void main(void) {

int i=10;

int &r=i; r++;

cout<<\i=88; cout<<\

}

程序四:

#include int f(int i)

{ static int k=1; for(;i>0;i--) k +=i; return k; }

void main() { int i;

for(i=0;i<5;i++) cout<

程序五:

#include void func(); int n=1; void main()

{ static int a;

int b= -9;

cout <<\ b:\ n:\b+=4; func();

cout <<\ b:\ n:\n+=10; func(); }

void func()

{ static int a=2; int b=5; a+=2;

n+=12; b+=5;

cout <<\ b:\ n:\}

实验二 C++对C的扩充

一、实验目的

1、了解在面向对象程序设计过程中C++对C功能的扩充与增强,并善于在编写程序的过程中应用这些新功能。

2、进一步熟悉编辑、编译、连接和运行C++程序的方法。 3、进一步熟悉C++程序的结构和编程方法。

二、实验要求

1、分析下列程序运行的结果。

#include

int amount=123; void main()

{ int amount=456; cout<<::amount<<',';

::amount=789;

cout<

}

2、编写一个程序,用来求2个或3个正整数中的最大数。 ①用不带默认参数的函数实现。

②用带默认参数的函数实现。

3、有5个字符串,要求对它们按由小到大顺序排列,用string方法。

4、定义一个求两个数中较小值的函数模板min( ),要求在main( )函数中进行调用求两个 浮点型数据和两个整型数据中较小的数。

实验三 类和对象(一)

一、实验目的

1、掌握声明类的方法,类和类的成员的概念以及定义对象的方法。 2、掌握类的构造函数与析构函数的概念和使用方法。 3、初步掌握用类和对象编制基于对象的程序。

二、实验要求

1、分析下面的程序,写出其运行时的输出结果。 #include using namespace std; class Date {public:

Date(int,int,int); Date(int,int); Date(int); Date( ); void display( ); private:

int month; int day; int year;

};

Date∷Date(int m,int d,int y):month(m),day(d),year(y){ } Date∷Date(int m,int d):month(m),day(d) {year=2005;}

Date∷Date(int m):month(m) { day=1;

year=2005; }

Date∷Date( ) { month=1; day=1;

year=2005; }

void Date∷display( )

{cout<

{ Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display( ); d2.display( ); d3.display( ); d4.display( ); return 0;

}

2、建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员变量:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数,声明一个学生对象,然后调用成员函数在屏幕输出学生信息。

3、类Person的定义如下,请实现该类,并在主函数中创建对象obj,然后使用构造函数为obj赋予初始值(内容自定)。 class Person { private:

string name; int age; int salary; char tel;

public: Person(string xname,int xage,int xsalary,char xtel); };

void display ();

实验四 类和对象(二)

一、实验目的

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

2、掌握对类的对象数组、对象的指针及其使用方法。

3、掌握友元的概念和使用。 4、了解类模板的使用方法。

二、实验要求

1、分析并比较下列程序运行的结果。 程序一:

#include #include class smallone {public:

smallone(int sma)

{ cout<<\};

void fn(int n)

{ smallone sm(n);

cout<<\ }

int main() { fn(10); fn(20); return 0; }

程序二:

#include #include class smallone {public:

smallone(int sma)

{ cout<<\};

void fn(int n)

{ static smallone sm(n);

cout<<\ }

int main() { fn(10); fn(20); return 0;

}

2、建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。

3、声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。(例3.14)

实验五 运算符重载

一、实验目的

1、进一步了解运算符重载的概念和使用方法。 2、掌握几种常用的运算符重载的方法。

二、实验要求

1、定义一个复数类Complex,重载运算法“+”,使之能用于复数的加法运算。将运算符重载为普通函数(非成员、非友元)、成员函数、友元函数。根据要求修改通过函数来实现复数相加的示例,分别编写程序,求两个复数之和。

#include using namespace std;

class Complex //定义Complex类 {public:

Complex(float x=0,float y=0){real=x;imag=y;} //构造函数

Complex complex_add(Complex &c2); //声明复数相加函数 void display() { cout<

float real; //实部 float imag; //虚部 };

Complex Complex::complex_add(Complex &c2) { Complex c;

c.real = real +c2.real; c.imag=imag+c2.imag; return c; }

int main()

{ Complex complex1(3.34f, 4.8f), complex2(12.8f, 5.2f);

Complex complex; //定义3个复数对象 complex=complex1.complex_add(complex2); // 进行两个复数的加运算 complex.display( ); return 0; }

实验六 继承和派生

一、实验目的

1、了解继承在面向对象程序设计中的重要作用。 2、进一步理解继承与派生的概念。

3、掌握通过继承派生出一个新的类的方法。 4、了解虚基类的作用和用法。

二、实验要求

1、运行程序,分析构造函数与析构函数的调用顺序。 程序一:

#include class A { public:

A(){cout<<\

~A(){cout<<\};

class B:public A { public:

B(){cout<<\

~B(){cout<<\};

void main() { B b; }

程序二:

#include class A { int a; public :

A(int aa=0) { a=aa; }

~A() { cout<<”Destructor A!”<

class B: public A { int b;

public:

B(int aa=0, int bb=0) : A(aa) { b=bb; }

~B() { cout<<”Destructor B!”<

void main()

{ B x(5),y(6,7);

}

2、分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cader类。要求:

①在两个基类种豆包含姓名、年龄、性别、地址、电话等数据成员。 ②在Teacher类中还包含数据成员title(职称),在Cader 类中还包含数据成员post(职务)。在Teacher_Cader类中还包含数据成员wages(工资)。

③在对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

④在类体中声明成员函数,在类外定义数据成员。

⑤在派生类Teacher_Cader的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再调用cout语句输出职务和工资。

实验七 多态性和虚函数

一、实验目的

1、了解多态性的概念。

2、熟悉虚函数的作用及其使用方法。 3、了解静态关联和动态关联的概念和用法。 4、了解纯虚函数和抽象类的概念和用法。

二、实验要求

1、分析程序运行结果,掌握虚函数的使用。 程序一:

#include class ONE { public:

virtual void f(){cout<<\ };

class TWO:public ONE { public:

TWO(){cout<<\};

class THREE:public TWO

{ public:

virtual void f(){TWO::f(); cout<<\};

void main() { ONE aa, *p; TWO bb; THREE cc; p = &cc; p->f();

}

程序二:

#include class Base { public:

virtual void fn() { cout <<\};

class SubClass :public Base

{ public:

virtual void fn(){ cout <<\ } };

void main() { Base bc,*p; SubClass sc; p=&bc; p->fn(); p=≻ p->fn(); }

2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。主函数中声明类B对象,调用类B中的geta()并将结果输出。 3、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。

实验八 输入输出流

一、实验目的

1、深入理解C++的输入输出的含义与其实现方法。 2、掌握标准输入输出流的应用,包括格式输入输出。 3、掌握对文件的输入输出操作。

二、实验要求

1、输入三角形的三边a,b,c,计算三角形的面积的公式是 area?s(s?a)(s?b)(s?c), s?a?b?c2

形成三角形的条件是:a+b>c,b+c>a,a+c>b

编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。

2、从键盘输入一批数值,要求保留3位小数,在输出时上下行小数点对齐。 ①用控制符控制输出格式;

②用流成员函数控制输出格式。

3、建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作:

①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数); ②从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;

③从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。

实验九 C++工具

一、实验目的

1、学会使用C++的异常处理机制进行程序的调试 2、学会使用命名空间解决名字冲突。

二、实验要求

1、求一元二次方程式ax2?bx?c?0的实根,如果方程没有实根,则利用异常处理机制输出有关警告信息。

2、学校的人事部门保存了有关学生的部分数据(学号、姓名、年龄、住址),教务部门也保存了学生的另外一些数据(学号、姓名、性别、成绩),两个部门分别编写了本部门的学生数据管理程序,其中都用了Student作为类名。现在要求在全校的学生数据管理程序中调用这两个部门的学生数据,分别输出两种内容的学生数据。要求用ANSI C++编程,使用命名空间。

实验十 复数计算器

一、实验目的

掌握面向对象程序设计方法和技巧,设计一个小型的应用程序,进一步提高解决问题的能力。

二、实验要求

(1)所设计的复数计算器可以进行+、-、*、+=、-=、*=、++、--、>=、<=、==、!=运算符,其中>=、<=是针对复数的模进行运算。

(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。

(3)设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。

(4)设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名用户以前的记录。用户记录应包括:做了多少次加减法、乘法、进行测试的次数,后3次的测试平均分等,在退出计算器程序时用新的用户记录代替原有的记录。