实验一 熟悉VC++IDE开发环境
一、实验目的
1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。
2、掌握如何编辑、编译、连接和运行一个C++程序。
3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。
二、实验要求
1、分析下列程序运行的结果。 程序一:
#include
cout< cout< int add(int x,int y) return x+y; } 程序二: #include p=&i; i=*p+10; cout<<\} 程序三: #include int i=10; int &r=i; r++; cout<<\i=88; cout<<\ } 程序四: #include { static int k=1; for(;i>0;i--) k +=i; return k; } void main() { int i; for(i=0;i<5;i++) cout< 程序五: #include { 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 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 smallone(int sma) { cout<<\}; void fn(int n) { smallone sm(n); cout<<\ } int main() { fn(10); fn(20); return 0; } 程序二: #include 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 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 A(){cout<<\ ~A(){cout<<\}; class B:public A { public: B(){cout<<\ ~B(){cout<<\}; void main() { B b; } 程序二: #include 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 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 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次的测试平均分等,在退出计算器程序时用新的用户记录代替原有的记录。