最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

面向对象程序设计(C )实验资料

来源:动视网 责编:小OO 时间:2025-10-02 17:41:40
文档

面向对象程序设计(C )实验资料

面向对象程序设计(C++)实验软件工程08实验一C++程序设计基础练习1.实验目的(1)学习编写简单的C++程序.并掌握C++程序的基本格式与规范。(2)理解C++程序结构的特点。(3)学习C++程序基本的输入输出操作。(4)学习数据类型常量和变量以及修饰符的使用。(5)学习基本的函数定义与调用方法。(6)学习作用域运算符的功能与基本使用方法。(7)学习内存的动态分配与释放方法。(8)学习引用的概念,掌握引用的基本使用方法。2.实验基本要求(1)输入并运行所给的参考程序1,并将程序中的注释部分
推荐度:
导读面向对象程序设计(C++)实验软件工程08实验一C++程序设计基础练习1.实验目的(1)学习编写简单的C++程序.并掌握C++程序的基本格式与规范。(2)理解C++程序结构的特点。(3)学习C++程序基本的输入输出操作。(4)学习数据类型常量和变量以及修饰符的使用。(5)学习基本的函数定义与调用方法。(6)学习作用域运算符的功能与基本使用方法。(7)学习内存的动态分配与释放方法。(8)学习引用的概念,掌握引用的基本使用方法。2.实验基本要求(1)输入并运行所给的参考程序1,并将程序中的注释部分
面向对象程序设计(C++)实验

软件工程08

实验一    C++程序设计基础练习

1.实验目的

(1)学习编写简单的C++程序.并掌握C++程序的基本格式与规范。

(2)理解C++程序结构的特点。

(3)学习C++程序基本的输入输出操作。

(4)学习数据类型常量和变量以及修饰符的使用。

(5)学习基本的函数定义与调用方法。

(6)学习作用域运算符的功能与基本使用方法。

(7)学习内存的动态分配与释放方法。

(8)学习引用的概念,掌握引用的基本使用方法。

2.实验基本要求

   (1)输入并运行所给的参考程序1,并将程序中的注释部分也输入计算机,体会和理解程序的基本格式规范。

(2)编制一个完整的包含输入和输出的简单C++程序,如参考程序2和参考程序3。掌握输入输出及其格式控制的基本使用方法。

(3)输入并调试参考程序4和参考程序5,体会和理解内置函数与函数重载的概念与基本使用方法。

 (4)输入并调试参考程序6和参考程序7。体会和理解作用域运算符的概念与基本使用方法。

 (5)输入并调试参考程序8和参考程序9,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。

3.实验基本步骤 

   (1)建立一个控制台应用程序项目baseform1,向其中添加—个源程序文件sum.cpp。按照所给的程序代码输入到计算机中,检查和调试程序,在确认没有发现错误之后,选择【Build】→【Build sum.exe】编译源程序,再选择【Build】→【Execute sum.exe】运行程序.并观察输出结果。若有问题,则需要重新检查程序。

说明:在C++程序中如果使用了系统提供的—些功能(如cin和cout),就必须在程序的首部首先声明相关的包含这些功能的头文件(如iostream.h),否则,系统无法找到实现这些功能的代码。在C++语言中—个头文件就是一个类库,类与类的预定义对象就包含在其中。所以,在使用这些类库中所包含的预定义对象时,必须在程序首部加以声明。

//参考程序1

//sum.cpp

#include

int add(int a ,int b);

int main()

{

  int  x,y,sum;

cout<<"Enter two numbers:"<<'\\n';

cin>>x;

cin>>y;

  sum=add(x,y);

cout<<"The sum is:"<  return 0;

}

int add(int a,int b)

{ int c;

 c=a+b;

 return c;

运行结果:

(2)按照参考程序l的输入与调试方法,输入、检查、调试和运行参考程序2和参考程序3,掌握输入输出及其格式控制的基本使用方法。

//参考程序2

#include

int main()

{ char name[20];

  cout<<”Hello,your name:”;

cin>>name;

cout<return 0;

}

运行结果:

//参考程序3

#include

int main()

{

  int x=25;

cout<}

运行结果:

(3)按照参考程序1的输入与调试方法,输入、检查、调试和运行参考程序4和参考程序5。理解内置函数与函数重载的概念与基本使用方法。

//参考程序4

#include

inline int doub(int x)

{return x*2;}

int main()

{ for(int i=1;i<3;i++)

    cout<cout<<”1+2 doubled is ”<}

运行结果:

//参考程序5

#include

int mul(int x,int y)

{return x*y;}

int mul(int x,int y,int z)

{return x*y*z;}

void main()

{

int a=3,b=4,c=5;

cout<cout<}

(4)按照参考程序1的输入与调试方法,输入、检查、调试和运行参考程序6和参考程序7,并观察输出结果,体会和理解作用域运算符的概念与基本使用方法。

//参考程序6

#include

int avar=10;

main()

{

  int avar;

  avar=25;

cout<<”avar is ”<  return 0;

}

运行结果:

//参考程序7

#include

int avar;

main()

{

int  avar;

avar=25;            //局部变量avar

::avar=10;           //全局变量avar 

cout<<”local avar=”<cout<<”global avar=”<<::avar<return 0;

}

运行结果:

(5)按照参考程序1的输入与调试方法,输入、检查、调试和运行参考程序8和参考程序9,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。

//参考程序8

#include

main()

{

int *p;          //声明一个整型指针变量p

  p=new int;       //动态分配一个int型存储区,并将首地址赋给p

*p=10;

cout<<*p;

delete p;        //撤销指针,释放p指向的存储空间

return 0;

}

运行结果:

//参考程序9

#include

main()

{

  int *p;

  p=new int;

  if(!p)

  {

    cout<<”allocation failure\\n”;

    return 1;

}

*p=20;

cout<<*p;

delete p;

return 0;

}

运行结果:

4. 实验结论:

实验二  类和对象

1.实验目的:

(1) 掌握Visual C++6.0基本操作

(2) 了解C++程序运行环境;

(3) 掌握简单的C++程序的开发过程(编辑、编译、连接和运行)。

(4) 掌握类及其成员的定义方法;

(5) 掌握对象的创建方法;

2.实验内容:

2.1按要求分析程序指出程序运行的结果:

1)分析下面的程序,并给出程序运行的结果:

#include

class change

{char c1,c2;

public:

   void set(char a){c2=((c1=a)-32);}

   void print()

   {cout<};

void main()

{change a,b;

a.set('a');

b.set('b');

a.print();

b.print();

}

运行结果:

程序分析:

2)分析下面的程序,并给出输出结果:

#include

class pair

{char c1,c2;

public:

   void set(char b)

   {c1=1+(c2=b);}

   unsigned where_am_I()

   {return((unsigned)this);}

   void print()

   {cout<};

void main()

{pair a,b,c;

a.set('A');

b.set('B');

c.set('C');

a.print();

cout<<"is at "<b.print();

cout<<"is at "<c.print();

cout<<"is at "<}

运行结果:

程序分析:

2.2编写并调试程序:

1)下面是一个类的测试程序,给定主函数,请写出类的定义,构成一个完整的程序,使执行程序后输出结果为:88-32=56

给定的主函数为:

void main()

{

   Tst t;

   t.init(88,32);

   t.print();

}

2)编程分析

由主函数可知,要创建的类名为Tst,一个类对象为t,类中含有两个公有成员函数init()和print(),利用函数init()对两个私有成员数据赋值,即为减数与被减数的数值,为了程序的实现需要定义第三个成员数据作为减法之差。

3)源程序

#include

class Tst

{

};

void main()

{

   Tst t;

   t.init(88,32);

   t.print();

}

4)运行结果

88-32=56

5)调试情况分析

   

3.实验结论:

实验三   类的应用

1. 实验目的:

1)  掌握类及成员的定义方法;

2)  掌握对象的创建方法;

3)  掌握对象数组、对象指针及*this指针的使用。

2.实验内容:

2.1 分析下面的程序,指出错误的地方

原来的程序如下:

Class CSample

{ int a=2.5;

Public:

Int b;

Void Print()

{cout<Void Set(int x,int y)

{

A=x;

Y=b;

}

Void main()

{

CSample Sam1,Sam2;

Sam1.Set(2,3);

Sam2.Set(5,6);

Sam1.Print();

Sam2.Print();

Cout<Cout<}

修改后的程序如下:

#include

class csample

{

}

    int main()

    {

       csample sam1,sam2;

       sam1.Set(2,3);

       sam2.Set(5,6);

       sam1.Print();

       sam2.Print();

       cout<       cout<       return 0;

    }

程序运行的结果:

a+b=5

a+b=11

7

9

2.2编写并调试程序:

1)按下面要求编程

  定义一个描述学生基本情况的类,数据成员包括姓名、学号、英语、数学、计算机成绩。成员函数包括设置姓名、学号和三门课程的成绩、输出数据、以及求平均值。

  设计主函数,在主函数里调用设置“姓名、学号和三门课程的成绩”的成员函数设置各数据调用输出数据成员函数,实现各数据的输出;调用求平均值的成员函数,求三门课的平均成绩,并输出显示。

程序如下:

#include

class   student   

  {   

 

  };   

    

  void   main()   

  {   

  

  }

运行结果:  

2)按下面要求编程

定义一个满足下列要求的类CDate;

a.    有三个成员数据:年、月、日;

b.    有设置日期的成员函数;

c.    有用格式“月/日/年”输出日期的成员函数;

d.    有对当前日期加一天的成员。

设计主函数,在主函数里创建对象;调用设置日期的成员函数,设置当天的日期;调用输出日期的成员函数输出当天日期;调用对当前日期加一天的成员函数,然后再调用输出日期的成员函数,输出第二天的日期。 

程序如下:

#include

class CDate

{

}

void main()

{

    

}

运行结果:

3.有一个类说明如下:

Class fun

{int I,j;

Public:

Int s,k;

Void SetData(int,int,int,int);

Void print();

};

要求:

a.    完成函数SetData(int,int,int,int)的定义,该函数用于设置各成员数据;完成函数void print()的定义;该函数用于输出各成员数据;

b.    设计主函数,在主函数里定义两个对象:Fun s1,s2;

c.    在主函数里调用SetData()成员函数,设置各个对象的数据,调用print()成员函数输出数据成员函数,实现各对象的数据的输出。

程序如下:

#include

class fun

{int i,j;

public:

    int s,k;

    void SetData(int,int,int,int);

    void print();

};

void fun::SetData(int a,int b,int c,int d)

{

    

}

void fun::print()

{

    

}

int main()

{

    fun s1,s2;

    s1.SetData(1,2,3,4);

    s2.SetData(5,6,7,8);

    s1.print();

    s2.print();

    return 0;

}

运行结果:

3.实验总结:

实验四    成员函数的重载

1、实验目的及要求:

1)掌握普通函数重载的方法

2)掌握成员函数重载的方法

2、实验内容:

2.1分析下面程序,指出程序运行的结果

#include

class ListClass

{int *List;

unsigned nMax;

unsigned nElem;

public:

void Init(int n=10)                                     

{List=new int [n];

nMax=n;

nElem=0;

    }

int Elem(int);

int &Elem(unsigned n){return List[n];}

unsigned Elem(void){return nElem;}

unsigned Max(void){return nMax;}

void Print(void);

int GetElem(int i)

{if ((i>=0)&&(i<=nElem))return List[i];

else return 0;

}

void Destroy(void) {delete [nMax]List;}

};

int ListClass::Elem(int elem)     

{

   if(nElem{List[nElem++]=elem;

return nElem;

}

Else                            

{int *list;                             

list=new int [nMax+1];

for(int i=0;idelete [nMax]List;

nMax++;

List=list;

List[nElem++]=elem;

return nElem;

}

}

void ListClass::Print(void)                //输出数组内容

{for(int i=0;icout<<'\\n';

}

void main(void)

{ListClass list,list1;

list.Init(10);

list1.Init(20);

for(int i=0;i<10;i++)                            

   list1.Elem(i);

cout<<"线性表list的元素的个数为:"<cout<<"线性表list长度为:"<cout<<"线性表list1的元素的个数为:"<cout<<"线性表list1的长度为:"<    list1.Print();

list1.Elem(3u)=100;

cout<<"现在线性表list1中的第三个值为:"<list1.Elem(20);

list1.Elem(200);

cout<<"现在线性表list1中的最后一个元素为:"<list.Destroy();

list1.Destroy();

}

运行结果:

2.2按下面的要求编写并调试程序:

1)使用函数重载的方法定义两个重名函数,分别求出整型数的两点间距离和实型数的两点间距离。

程序如下:

运行结果:

2)定义一个Cpoint类,用成员函数的重载实现上题的功能。并编写主函数测试。

程序如下:

实验结果:

3)使用重载的方法编写一个求整数、和双精度数的平方数的类。并用一个主函数进行测试。

程序如下:

#include

class Squar

{

};

void main()

{

Squar c;

cout<<"2的平方是: "<cout<<"1.1的平方是: "<cout<<"1000的平方是: "<}

运行结果:

3.实验总结:

实验五     构造函数与析构函数

1、实验目的:

1)掌握构造函数和析构函数定义方法;

2)掌握构造函数的重载、具有默认值的构造函数的使用方法;

3)加深对构造函数的特殊用途的理解。

2、实验内容:

2.1 分析程序指出程序运行的结果:

1)分析下面程序中的对象传递,写出输出结果。

#include

Using std::cout;

Using std::endl;

class Cylinder

{

public:

   Cylinder(){}

   Cylinder(double r,double h);

   void setcylinder(double r,double h);

   double getradius(){return radius;}

   double getheight(){return height;}

   double volume();

   double surface_area();

private:

   double radius;

   double height;

};

const double PI=3.1415926;

Cylinder::Cylinder(double r,double h)

{

   radius=r;

   height=h;

}

void Cylinder::setcylinder(double r,double h)

{

   radius=r;

   height=h;

}

double Cylinder::volume()

{

   double vol;

   vol=PI*radius*radius*height;

   return vol;

}

double Cylinder::surface_area()

{

   double area;

   area=2*PI*radius*height+2*PI*radius*radius;

   return area;

}

void main()

{

   Cylinder cylinder1(7.0,12.0),cylinder2;

   cylinder2.setcylinder(12.3,18.7);

   cout<<"the radius of cylinder1 is:\"<   cout<<"the height of cylinder1 is:\"<   cout<<"the volume of cylinder1 is:\"<   cout<<"the surfacearea of cylinder1 is:\"<   cout<<"the radius of cylinder2 is:\"<   cout<<"the height of cylinder2 is:\"<   cout<<"the volume of cylinder2 is:\"<   cout<<"the surfacearea of cylinder2 is:\"<}

运行结果:

2) 分析下面的程序,指出程序的错误。

#include

#include

class Sample

{

   int i;

public:

int j;

   Sample(int x)

   {

      i=x;//cout<<"i="<   }

   ~Sample()

   {  

      exit(1); 

      cout<<"撤消"<   }

};

void main()

{  

Sample a1(10),a2(20);

exit(1); 

   cout<<"撤消"<}

3)将下面的程序补充完整

#include

class test

{

private:

   int num;

   double f1;

public:

   test();

   test(              );

   getint(){return num;}

   double getfloat(){return f1;}

};

test::test()

{

   cout<<"默认初始化"<   cout<<"调用构造函数1"<              num  =0;

              f1 =0.0;

}

test:: test(             )

{

   cout<<"初始化"<   cout<<"调用构造函数2"<      

 

}

void main()

{

   test a;

  test b(2,5.5);

}

2.2 编写并调试程序

编写一个实现两个数相减的类的测试程序,请写出类的定义,构成一个完整的程序,要求调用类的构造函数和析构函数时均有明确的输出信息。

#include

Using std::cout;

Using std::endl;

class Cha

{

   int a,b;

public:

   Cha(int,int);

   void print();

};

Cha::Cha(int x,int y)

{

  

}

void Cha::print()

{

   }

void main()

{

   Cha t(88,32);

   t.print();

}

程序运行结果:

3.实验总结:

实验六  对象成员

1、实验目的及要求

1)理解对象成员的概念

2)掌握对象成员的初始化方法

2、预习对象成员,对象成员的创建和使用,*this指针等相关知识。

3、 实验内容

1 分析调试程序指出程序运行的结果

1)分析下面程序中对象传递,写出输出结果.

#include

class A

{

int i;

public:A(int x)

   {i=x;}

   int get()

   {return i;}

};

int cube(A a)

{return a.get()*a.get();}

void main()

{

A a1(10),a2(20);

cout<cout<}

实验结果:

2)分析对象成员的调用,写出程序结果

#include

#include

class B

{

private:

int a,b;

public:

B(){}

B(int i,int j);

void showb();

};

class A

{

private:

B c;

public:

A(){}

A(int i,int j);

void showa()

{

        a=i;

        b=j;

};

A::A(int i,int j):c(i,j)

{}

void A::showa()

{

        c.showb();

}

B::B(int i,int j)

{

        a=i;

        b=j;

}

void B::showb()

{

     cout<<"a="<<

}

void main()

{

        A a1(5,6);

        a1.showa();

}

实验结果:

2.编写程序

编写一类Cpoint表示一个点的信息,在次基础上编写一个表示三角形的类tria,顶点为其对象成员,编写完整的程序输出三角形面积.

#include

#include

class Ctria

{

};

void main()

{

        Ctria a1;

        a1.SetData(3,4,5);

     cout<<"三角形面积="}

输出结果:

4、实验总结:

实验七 成员函数和友员函数

1. 实验目的

1)掌握const对象,const成员函数和const成员数据的使用;

2)掌握友员函数的定义和使用。

2.实验内容:

2.1分析程序指出程序运行的结果:

#include

class Sample 

{

      int n;

public:

    Sample(int i) 

    {

        n=i;}

    void setvalue(int i) 

    {

        n=i;

    }

void    display() 

    {

     cout<<"n=z"<    }

};

void main()

{

    Sample s(5);

    s.setvalue(8);

    s.display();

}

程序运行结果:

2.2编写并调试程序

1)编写一个程序求直角坐标中一个点到直线的距离。要求设计一个点类point,含有两个公有成员数据x和y,代表点的坐标。另一个类为直线类line,它有三个私有成员数据a,d,c。分别代表直线方程ax+by+c=0的系数。在类line中设计一个友元函数distance计算一个点到直线的距离。点(x,y)到直线ax+by+c=0的距离distance的计算公式如下:

      distance=|ax+by+c|/sqrt(a*a+b*b)

请根据下面给出的部分程序编写直线类line及其成员函数,以组成完整的程序。

#include

#include

class point

{public:

float x,y;

point(float i,float j)

{

x=i;

y=j;

}

};

void main()

{point p1(2,4);

line l1(1,2,3);

cout<<"distance="<}

程序运行结果:

2)编写一类Cpoint表示一个点的信息。在此基础上编写一个表示三角形的类tria,定点为其对象成员。编写完整的程序输出三角形的面积。要求用友元函数来实现三角形面积的输出。

程序如下:

#include

#include

class Cpoint 

{public:

float a1,b1;

    Cpoint(float i,float j)

    {

        a1=i;

        b1=j;

    }

    

};

class tria

{

    double L1,L2,L3,s;

public:

    double area;

    Cpoint A,B,C;

    tria(float a,float b,float c,float d,float e,float f):A( a,b),B(c,d),C(e,f)

    {

L1=sqrt((A.a1-B.a1)*(A.a1-B.a1)+(A.b1-B.b1)*(A.b1-B.b1));

L2=sqrt((A.a1-C.a1)*(A.a1-C.a1)+(A.b1-C.b1)*(A.b1-C.b1));

L3=sqrt((B.a1-C.a1)*(B.a1-C.a1)+(B.b1-C.b1)*(B.b1-C.b1));

    }

    double are()

    {

        s=((L1+L2+L3)/2);

area=sqrt(s*(s-L1)*(s-L2)*(s-L3));

    return area;

    }

friend void print(tria D);

};

    void print(tria D)

{cout<<"三角形面积为: "<    void main()

    { 

       tria D(4.0,2.0,3.0,4.0,5.0,6.0);

D.are();

       print(D);

       }

程序运行结果:

3实验总结:

实验八 静态成员

1、实验目的:

1)掌握静态成员数据的定义及使用;

2)掌握静态成员数据的定义及使用。

2、实验内容:

2.1 分析下面的程序,指出程序运行的结果。

#include

class Sample

{

    int a,b;

    static int c;

public:

    Sample()

    {

        a=b=0;

        c++;

    }

    void show()

    {

     cout<<"a="<    }

};

int Sample::c=1;

void main()

{

    Sample a1,a2;

    a1.show();

    a2.show();

}

程序运行结果如下:

简要分析:

1、静态成员是类的一个成员,在创建对象前就为它分配了内存空间,并且它的数值是供所有对象共享的一种特殊的成员。

2、静态成员包括静态成员数据和静态成员函数。

3、静态成员函数必须要有确定的值,而且必须在类体内声明一次。由于在类定义中不能对成员数据据直接进行初始化,因此必须在类体外再声明一次并进行初始化。在类体内声明时,静态成员数据和静态成员函数前都必须加关键字static,而在类体外声明时就不用再写了。

2.2编写并调试程序。

1)编写一个名为score的类,用于统计一个班的学生成绩。其中使用一个静态成员数据totals来存储总分及一个静态成员函数re_totals()返回该总分。并编写相应的测试程序。

程序编写如下:

#include

class score

{

    int mark[10];

public:

   static int tals;

    static int num;

    static int re_tals()

    {return tals;}

    void set()

    {   int i;

     for(i=0;i<10;i++)

        {

         cin>>mark[i];

            tals=tals+mark[i];

            num++;

        }

     cout<<"The scores of the class are following: "< for(i=0;i<10;i++)

{cout< cout<<'\\n';

    }

    int get_num(void)

    {return num;}

};

int score::tals=0;

int score::num=0;

void main()

{

    score t;

cout<<"Please input the scores of the class:"<    t.set();

cout<<"The number of the scores is: "< cout<<"The total score of the class is: "<}

程序运行结果:

2)编写一个名为foball的类,用于统计一个班的学生成绩。其中使用一个静态成员数据totals来存储总分及一个静态成员函数re_totals()返回该总分。并编写相应的测试程序。

程序编写如下:

#include

class foball

{

    int mark[10];

public:

    static int num;

    static int tals;

    static int re_tals()

    {return tals;}

    void set()

    {   int i;

     for(i=0;i<10;i++)

        {

         cin>>mark[i];

            tals=tals+mark[i];

            num++;

        }

     cout<<"The scores of the class are following: "< for(i=0;i<10;i++)

{cout< cout<<'\\n';

    }

    int get_num(void)

    {return num;}

};

int foball:: tals=0;

int foball::num=0;

void main()

{

    foball t;

cout<<"Please input the scores of the class:"<    t.set();

cout<<"The number of the scores is: "< cout<<"The total score of the class is: "<}

程序运行结果:

3、实验总结:

实验九 继承

1、实验目的

1)掌握继承的实现方法;

2)继承中常见问题的处理方法。

2、实验内容

2.1分析下面的程序,指出程序运行的结果

1)分析下面的程序,指出程序运行的结果:

1.#include

class CBase

{public:

void fn1();

};

void CBase::fn1()

{cout<<"调用基类类的函数fn1()\\n";

}

class CDerived:public CBase

{

public:

    void fn1();

};

void CDerived::fn1()

{cout<<"调用派生类的函数fn1()\\n";

}

void main()

{

    CDerived d1;

    CBase *pb=&d1;

    CBase &pd=d1;

    d1.fn1();

pb->fn1();

    pd.fn1();

}

2.运行结果:

3)分析下面的程序,指出程序运行的结果:

1.#include

class CBase1

{

    int x;

public:

    CBase1()

{x=0;cout<<"调用构造函数CBase1()!\\n";}

    CBase1(int a)

{x=1;cout<<"调用构造函数CBase1(int)!\\n";}

~CBase1(){cout<<"调用析构函数~CBase1()!\\n";}

};

class CBase2

{int y;

public:

    CBase2()

{y=0;cout<<"调用构造函数CBase2()!\\n";}

    CBase2(int a)

{y=a;cout<<"调用构造函数CBase2(int)!\\n";}

~CBase2(){cout<<"调用析构函数~CBase2()!\\n";}

};

class A

{int x;

public:

A(){x=0;cout<<"调用构造函数A()!\\n";}

A(int a){x=a;cout<<"调用构造函数A(int)!\\n";}

~A(){cout<<"调用析构函数~A()!\\n";}

};

class CDerived:public CBase1,virtual public CBase2

{

    A a;

public:

    CDerived()

{cout<<"调用构造函数CDerived()!\\n";}

    CDerived(int x,int y,int z):a(x),CBase1(y),CBase2(z)

{cout<<"调用构造函数CDerived(int,int,int)!\\n";}

~CDerived(){cout<<"调用析构函数~CDerived()!\\n";}

};    

    void main()

    {

        CDerived *x=new CDerived;

        CDerived y(2,3,4);

        delete x;

     cout<<"main()函数结束!\\n";

    }

实验结果:

2.2编写并调试程序:

1)定义一个图形类,其中有保护类型的成员数据:高度和宽度,一个公有的构造函数。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含一个函数area(),分别用来计算矩形和等腰三角形的面积。

1.程序设计如下:

#include

class picture

{

protected:

double h,w;

public:

    picture (double i,double j){h=i;w=j;}

};

class jpicture:public picture

{double mi;

public:

    

};

class sanjiaoxing:public picture

{

double mi;

public:

};

void main()

{ jpicture a(1,2);

sanjiaoxing b(3,4);

a.area();

b.area();

}

2.实验结果:

2)定义一个人员类cpeople,其属性有(保护类型):姓名、性别、年龄;从中派生出学生类cstudent,添加属性:学号、入学时间和入学成绩;从cpeople类再派生出教师类cteacher,添加属性:职务、部门、工作时间;有cstudent类派生研究生类cgraduate,添加属性:研究方向和导师,由cgraduate和cteacher共同派生出在职研究生类cgradonwork,分别定义其中的构造函数和输出函数。主函数中定义各种类的对象,并完成测试。

1.程序设计如下:

2.实验结果:

3、实验结论:

实验十  运算符重载

1. 实验目的及要求

1)   掌握运算符重载的基本概念和方法。

2)   熟习几种特殊的运算符的重载。

2. 实验内容

1.   分析下面的程序,指出程序运行的结果:

#include

class point{

    int x,y;

public:

    point(int vx,int vy){

        x=vx; y=vy;}

    point(){x=0,y=0;}

    point operator+(point p1)

    {

        int px=x+p1.x;

        int py=y+p1.y;

        return point(px,py);

    }

    point operator-(point p1)

    {

        point p;

        int px=x-p1.x;

        int py=y-p1.y;

        return point(px,py);

    }

void print(){cout<};

void main(void)

    point p1(10,10),p2(20,20);

    p1=p1+p2;

    p1.print();

    //p2.print();

    //p3.print();

}

程序分析:

运行结果为:

3)   分析下面程序,指出程序运行的结果:

#include

static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

class date

{

    int mo,da,yr;

public:

    date(int m,int d,int y){mo=m;da=d;yr=y;}

    date(){}

    void disp()

{cout<    date operator+(int day)

    {

        date dt=*this;

     day+=dt.da;//cout<     while(day>dys[dt.mo-1])

     {day-=dys[dt.mo-1];//cout<        if(++dt.mo==13)

        {dt.mo=1;

        dt.yr++;

        }

        }

     //cout<        //dt.disp();

        dt.da=day;

        return dt;

    }

};

void main(void)

{

    date d1(5,31,2009),d2;

    //d1.disp();

    d2=d1+20;

    d2.disp();

}

程序运行结果:

三. 编写并调试程序.

定义一个描述平面上一个点的类point,重载“++”和“--”运算符,并区分这两种运算符的前置和后置操作,构成一个完整的程序。

程序代码:

程序运行的结果是:

2)构造一个分数类rationalNumber,该类中包括分子和分母两个成员数据,并具有下述功能:

1建立构造函数,它能防止分母为0,当分数不是最简形式时进行约分,并避免分母为负数。

2重载加法、减法、乘法和除法运算符。

3重载关系运算符:>、<、==等。

程序代码:

程序执行的结果为:

 实验十一  虚函数

一、实验目的

1)掌握虚函数的定义和使用

2)掌握抽象类的定义和使用

3)掌握纯虚函数的定义

4)掌握虚析构函数、纯虚函数和抽象类的作用

二、实验原理

1.利用虚函数的作用:当编译器编译虚函数时,编译系统将用动态连接的方式进行编译。即在编译时不确定该虚函数的版本,而是利用一种机制在运动过程中根据其所指向的实例决定使用哪一个函数版本。

2.利用虚析构函数的原则:当将基类指针或引用new运算符指向派生类对象时,为了在释放派生类对象时能调用派生类的析构函数,必须将基类的析构函数定义为虚函数。

3.抽象类的作用:为它的所有派生类提供一个公共接口,纯虚函数是定义抽象类的一种间接手段。

三、实验设备

实验室里调备的计算机、window xp,visual c++6.0

四、实验内容

4.1分析下面各题程序,按各题的要求进行实验

1)分析下面的程序,指出程序运行的结果:

#include

class CBase

{public:

    virtual void f1()          //将成员函数f1()声明为虚函数

{cout<<"调用函数CBase::f1()!"<    virtual void f2()            //将成员函数f2()声明为虚函数

{cout<<"调用函数CBase::f2()!"<    void f3()                    //一般成员函数

{cout<<"调用函数CBase::f3()!"<};

class CDerived:public CBase            //公有继承CBase

{void f1()

{cout<<"调用函数CDerived::f1()!"<void f2()

{cout<<"调用函数CDerived::f2()!"<void f3()

{cout<<"调用函数CDerived::f3()!"<};

void main()

{CBase obj1,*p;              //定义CBase的对象obj1和指针对象p

CDerived obj2;                //定义CDerived的对象obj1

p=&obj1;    //将obj1的地址给p

p->f1();       //通过p调用基类版本的f1()函数

p->f2();    //通过p调用基类版本的f2()函数

p->f3();    //通过p调用基类版本的f3()函数

p=&obj2;    //将派生类对象obj2的地址赋给p

p->f1();              //动态连接,调用派生类版本

p->f2();    //动态连接,调用派生类版本

p->f3();    //    调用基类版本

}

运行的结果:

2)分析下面的程序,指出程序运行的结果:

#include

class CBase

{public:

    CBase()                           //CBase类的构造函数

{cout<<"调用构造函数CBase()!"<    fun();}                    //构造函数中调用虚函数fun()

    virtual void fun()               //定义虚函数

{cout<<"调用构造函数CBase::fun()!"<};

class CDerived:public CBase

{public:

    CDerived()                      //CDerived类的构造函数

{cout<<"调用构造函数CDerived()!"<    fun();}                     //构造函数中调用虚函数fun()

    void fun()

{cout<<"调用构造函数CDerived::fun()!"<};

void main()

{CDerived d;                        //创建对象

d.fun();

}

运行结果:

3)分析下面的程序,指出程序的错误

#include

#include

class CBase

{protected:

    char *ch;

public:

    CBase(char *x)

    {ch=new char[20];

    strcpy(ch,x);

    }

    virtual void fun()=0;           

    virtual void fun1()                 //虚函数

{cout< {cout<    ~CBase()

{delete[]ch; cout<<"~CBase()"<    }

};

class CDerived:public CBase

{protected: 

char *ch;

public:

    CDerived (char *x,char*y):CBase(y)

    {ch=new char[20];

    strcpy(ch,x);}

    void fun1()

    // {cout< {cout<    Virtual ~CDerived()     

{delete[]ch; cout<<"~CDerived()"<};

void main()

{CBase obj1("Hello"),*p;   

p=&obj1;

p->fun1();

p->fun();    

p=new CDerived("China

p->fun1();

p->fun();

delete p;

}

运行结果:

4.2编写并调试程序

1)编写一个程序计算三角,正方形和圆形的面积。

分析:依题意,可以抽象出一个基类CBase,在其中说明一个虚函数,用来求面积,并利用单接口、多实现版本设计各个图形求面积的方法。

源程序:

运行结果:

2)编写一个程序计算正方形、球体和圆柱体的表面积和体积。

分析:依题意,抽象出一个公共基类CContaineer为抽象类,在其中定义求表面积和体积的虚函数(该抽象类本身没有表面积和体积可言)。抽象类中定义一个公共的数据成员radius,此数据可作为球体的半径、正方形的边长、圆柱体底面积圆半径。由此抽象类派生出要描述的三个类,在这三个类中都具有求表面积和体积的重定义版本。

源程序:

运行结果:

实验总结:

实验十二 函数模板与类模板

一、实验目的

1.理解模板的作用。

2. 学习函数模板及其声明方法

3. 掌握模板函数及其生成方法

4. 学习函数模板的异常情况的处理方法

5. 学习类模板的定义和使用方法

二、实验内容

2.1分析下面各题程序,按各题的要求进行实验

1)分析下面的程序,指出程序运行的结果:

  教材p239 6.7题

运行结果:

2)改错:教材p239 6.7题

2.2编写并调试程序

1)教材p242 6.12题。

提示10个元素的整数数组的冒泡排序算法如下:

int a[10];

int temp;

for(int i=0;i<10;i++)

for(int j=0;i<10-i;j++)

if( a[j]>a[j+1])

  {  temp=a[j];

     a[j]=a[j+1];

     a[j+1]=temp;

}

2)用类模板实现对栈的操作,栈的数据结构由链表实现。栈的功能:进栈、出栈和清空。并在主函数中实现对int栈和struct CHAP5型栈的基本操作。

  Struct CHAP5

{  

  Char * pName;

  Bool Gender;

int Age;

  Struct CHAP5 * next;   

}

提示:参考教材例题6.7.

源程序:

运行结果:

实验总结:

实验十三 I/O流类库

1.实验目的

1)熟悉流及流类库的作用。

2)掌握流类库常用的类及其成员函数的使用方法

3)学习输入输出基本方法及其格式控制

4)学习文本文件和二进制文件的输入输出方法

2.实验要求:

(1)设计一个留言类,实现如下功能:

1)程序第一次运行时,建立一个文本文件c:\\msg.ini,并把用户输入的信息存入该文件。

2)以后运行时,先读取文件的内容并显示给用户,然后由用户使入新的信息,退出时存入文档。文件的内容,既可以是最新的,也可以包括以前的信息,请自己选择。

(2)定义一个类,重载输出运算符“<<”,用一定的格式将类的成员显示出来。

3.实验内容:

(1)定义一个类Mailman,在构造函数中检查“c:\\msg.ini”文件的存在,如果不存在则创建之,否则读取并显示内容给用户。C++库函数:

Open(“c:\\msg.ini” ,ios::in);

用法:   fstream fs;

  fs. Open(“c:\\msg.ini” ,ios::in);

参考程序:

   Void MailMan::ReadMsgFromFile()

{

fs. open(“c:\\msg.ini” ,ios::in);

char temp;

fs.unsetf(ios::skipws); //读入空格

for(int i=0;i<1024;i++)

{

  if(fs>>temp) //读入一个字符,否则返回false

  {

Buf[i]=temp;

}

     Else

{ Buf[i]=’\0’;

Break;

}

}

Fs.close();

}

(2)把用户输入的信息存放到程序中定义的缓冲区,请注意缓冲区的大小。

  Void MailMan::InMsg()

{

 Char temp;

  Cin.unsetf(ios::skipws);

  Cout<<”\\n please input your message, end with \”~\”(shift+`“<for(int i=0;i<1024;i++)

{

  Cin>>temp;

Buf[i]=temp;

  if(temp==”~”) //读入一个字符,直到~位置

  {

Buf[i]=’\0’;

Break;

}

}

}

(3)用户退出时,询问是否把留言写入,如果是则把信息写入文件:

 

  Void MailMan::SaveMsgToFile()

{

fs. open(“c:\\msg.ini” ,ios::out);

fs<fs.close();

cout<<”\\n message saved to file.”<return;

}

(4)定义一个类abc,并重载输出运算符,使得abc类的成员可以以多种样式输出。

   Class abc

{

int i;

double d;

float f;

public:

abc();

friend ostream & operator<<(ostream & s,abc x);

};

abc::abc()

{

i=9999;

d=-100.101;

f=9.0;

}

ostream & operator<<(ostream & s,abc x)

{

cout.setf(ios:;hex);

cout<cout. unsetf(ios:;hex);

cout.width(15);

cout. setf(ios:;fixed);

cout.precision(6);

cout.fill(‘$’);

cout<cout.width(20);

cout.fill(‘@’);

cout.precision(4);

cout.setf(ios::showpos);

cout<return s;

}

在main()函数中,定义一个abc类的对象e之后,只需用一下语句便可以用自定义的格式输出abc类的对象:

abc e;

     cout<完整程序:

运行结果:

总验总结:

文档

面向对象程序设计(C )实验资料

面向对象程序设计(C++)实验软件工程08实验一C++程序设计基础练习1.实验目的(1)学习编写简单的C++程序.并掌握C++程序的基本格式与规范。(2)理解C++程序结构的特点。(3)学习C++程序基本的输入输出操作。(4)学习数据类型常量和变量以及修饰符的使用。(5)学习基本的函数定义与调用方法。(6)学习作用域运算符的功能与基本使用方法。(7)学习内存的动态分配与释放方法。(8)学习引用的概念,掌握引用的基本使用方法。2.实验基本要求(1)输入并运行所给的参考程序1,并将程序中的注释部分
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top