计算机工程学院实验报告
课程名称:C++程序设计教程 指导教师:
实验项目名称:类的设计与对象使用 实验项目编号:实验1 一、 目的
1.熟悉C++开发环境。
2.掌握多文件结构程序项目的建立过程。
3.初步掌握面向对象程序的多文件结构项目的开发运行步骤。
4.掌握类的定义和使用以及类对象的声明和使用方法,理解具有不同访问属性的成员的访问方式。
5.掌握构造函数和析构函数的作用和编写方法。 6.了解并掌握静态成员、常成员的使用。
二、实验内容与设计思想
1.下面的程序在编译时会出错,请修改程序,使之能正确运行。然后得到的正确
程序分成3个文件。文件MyClass.h包括类的定义,文件MyClass.cpp包括类成员函数的实现,文件App.cpp包括类的使用。调试、运行该程序,使之获得正确结果。
#include
int x, y; };
MyClass::MyClass(int a = 0, int b =0){ x = a; y = b; } void MyClass::Print() {
cout << \ cout << \ }
int main() { MyClass obj1,obj2(5,8); obj1.x =1; obj1.y =3; obj1.Print(); obj2.Print();
班级:
姓名: 学号: 组号:
实验成绩:
上机实践日期: 上机实践时间:
return 0; }
实验代码:
MyClass.h
#ifndef MYCLASS #define MYCLASS
// MyClass.h头文件的内容 class MyClass{ public: MyClass() { x = 0; y = 0; } MyClass(int a = 0, int b = 0); void Print(); private: int x, y; };
#endif
MyClass.cpp
#include\ #include
MyClass::MyClass(int a , int b ){x = a;y = b;} void MyClass::Print(){ cout << \ << x << endl; cout << \ << y << endl; }
App.cpp
#include
MyClass obj1(1, 3), obj2(5, 8); obj1.Print(); obj2.Print(); return 0; }
2.已知两个矩形的长和宽,用面向对象的概念编程求它们的面积和周长。假设矩形 1 的长和宽分别为 20 和 50;矩形 2 的长和宽分别为 3.6 和 4.5。(先定义矩形类再实例化两个对象)
实验代码:
#include
rectangular(int a, int b) { Long = a; Wide = b; }
//面积
int Area( ) { return Long*Wide; }
//周长
int Perimeter() { return 2 * (Long + Wide); }
private:
int Long;//长 int Wide;//宽 };
int main() {
rectangular rec1(1, 3), rec2(5, 8);
cout << \矩形1的面积为:\ << rec1.Area() << endl << \矩形1的周长为:\ << rec1.Perimeter() << endl;
cout << \矩形2的面积为:\ << rec2.Area() << endl << \矩形2的周长为:\ << rec2.Perimeter() << endl; return 0; }
3. 下面程序中定义了一个整型动态数组,编写了3个构造函数。 #include
IntArray( int *array, int sz ) ; // 用静态数组array的前sz个元素初始化新数组 IntArray( const IntArray &rhs ) ; // 拷贝构造函数 void printAll(); private: int *ia; int size; };
IntArray::IntArray( int sz ) {
size = sz; // 设置数据成员 ia = new int[ size ];
for ( int ix=0; ix < size; ++ix )
ia[ix] = 0; // 初始化数组元素 }
IntArray:: IntArray( int *array, int sz ) { size = sz; // 设置数据成员 ia = new int[ size ];
for ( int ix=0; ix < size; ++ix )
ia[ix ] = array[ ix ]; // 拷贝数据成员 }
IntArray:: IntArray( const IntArray &rhs ) {
size = rhs.size; ia = new int[ size ];
for (int ix = 0; ix < size; ix++ ) ia[ ix ] = rhs.ia[ ix ]; }
void IntArray::printAll() {
for ( int ix=0; ix < size; ++ix ) cout< int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; IntArray arr1(10), arr2(a,5),arr3(arr2); arr1.printAll(); arr2.printAll(); arr3.printAll(); return 0; } (1)为IntArray加上析构函数并编译运行程序,体会类的构造函数和析构函数的 作用。 (2)程序中,类IntArray的三个构造函数都是以相似的方式来实现的。一般来说,当两个或多个函数重复相同的代码时,可将这部分代码抽取出来,形成独立的函数,以便共享。以后如果需要改变这些实现,则只需改变一次,而且这种实现的共享本质更容易为大家所理解。怎样把构造函数中的代码抽取出来形成独立的共享函数呢?请给出一种可能的实现。按你给出的实现方法修改程序并重新编译运行。 实验代码: #include IntArray(int sz); // 数组初始化为sz个元素,初值全为0 IntArray(int *array, int sz); // 用静态数组array的前sz个元素初始化新数组 IntArray(const IntArray &rhs); // 拷贝构造函数 void printAll(); void common(int *array, int sz); ~IntArray() { delete[] ia; } private: int *ia; int size; }; IntArray::IntArray(int sz) { int *array = NULL; size = sz; // 设置数据成员 common(array, size); } IntArray::IntArray(int *array, int sz) { size = sz; // 设置数据成员 common(array, size); } IntArray::IntArray(const IntArray &rhs) { int *array = rhs.ia; common(array, rhs.size); } void IntArray::printAll() { for (int ix = 0; ix < size; ++ix) cout << ia[ix] << \; cout << endl; } void IntArray::common(int *array, int sz)