面向对象程序设计实验报告

综 合 实 验 报 告

面向对象程序设计

专业名称:               

    级:___                     

    名:                    

    号:                          

信息科学与工程学院

二零一三年七月

 

第一题······················ 1

1.1题目概述·················· 1

1.2设计思路·················· 1

1.3设计说明与调试分析·············· 2

1.4编码实现·················· 2

1.5程序运行结果················ 4

第二题······················ 4

2.1题目概述·················· 4

2.2设计思路·················· 4

2.3设计说明与调试分析·············· 4

2.4编码实现·················· 5

2.5程序运行结果················ 6

设计心得:···················· 7

参考文献:···················· 7


第一题   

1.1题目概述

用抽象类设计计算二维平面图形面积的程序,在基类TDshape中设计纯虚函数area()和printName(),area()用于计算机几何图形的面积,printName()用于打印输出几何图形的类名,如Triangle类的对象就打印输出“Triangle”。每个具体形状的类则从抽象类TDshape派生,各自需要定义其独有的数据成员和成员函数,并且定义area()和printName()的具体实现代码,如图5-9所示。


要求编写以TDshape为接口的函数,借以访问具体类如Triangle和Rectangle类的成员函数area(),printName()。

1.2设计思路

用虚构函数写出基类TDshape,之后创建派生类Trangle、Rectangle,每个派生类都定义double width,height,之后定义area(),printName,每个里面都有cout函数,同时每个派生类都有set和get函数,分别用来给width,height赋值和返回width,height的数值。

1.3设计说明与调试分析

见代码。

1.4编码实现

#include<iostream>

using namespace std;

class TDshape

{

public:

    virtual void area()=0;

    virtual void printName()=0;

};

class Triangle:public TDshape{  //公有继承TDshape

    private:

        double width,height;    //定义私有成员width,height

    public:

    void  setWidth(double w)

    {

        width=w;                //赋值给width

    }

    void  setHeight(double h)

    {

        height=h;               //赋值给height

    }

    double getWidth()

    {

        return width;           //返回width的值

    }

    double getHeight()

    {

        return height;          //返回height的值

    }

    void printName()

{

    cout<<"该图形是三角形。"<<endl;  //输出图形的个名字

}

void area(){

cout<<"面积是"<<width*height*0.5<<endl;  //计算面积并且输出

}

};

class Rectangle:public TDshape{     //公有继承TDshape

     private:

        double width,height;         //定义私有成员width,height

    public:

    void  setWidth(double w)

    {

        width=w;                     //赋值给width

    }

    void  setHeight(double h)

    {

        height=h;                   //赋值给height

    }

    double getWidth()

    {

        return width;                 //返回width的值

    }

    double getHeight()

    {

        return height;                 //返回height的值

    }

    void printName()

{

    cout<<"该图形是矩形。"<<endl;      //输出图形名称

}

void area(){

cout<<"面积是"<<width*height<<endl;    //计算面积并且输出

}

};

int main()

{

    Rectangle r;

    Triangle t;

    r.setHeight(70);                   //调用Rectangle中的setheight 给height赋值

    r.setWidth(60);                    //调用Rectangle中的setwidth 给width赋值

    r.printName();                    //调用Rectangle中的printName 打印出图形名称

    r.area();                         //打印面积。

    t.setHeight(70);

    t.setWidth(60);

    t.printName();

    t.area();

}

1.5程序运行结果

第二题

2.1题目概述

假设有一个工人类,形式如下:

class Worker{

  char name[10];

int age;

double salary;

public:

Worker(…)

void SetData(char *Name,int Age,double wage)

void Display()

……

}

   其中的name表示姓名、age表示年龄、salary表示薪金,构造函数worker()实现各数据成员的初始化,SetData()成员函数用于重置各数据成员的值,Display()用于显示输出各数据成员的值。

完成该类的设计,并用STL中的链表list(或向量vector、堆栈stack、队列queue等数据结构)管理该类的对象,要求至少建立两个链表、每个链表中至少存入Worker类的3个对象,通过迭代器访问输出各节点对象的数据成员,并利用链表的merge算法将两个链表合并在一起,然后输出合并后的链表节点对象。

2.2设计思路

2.3设计说明与调试分析

见代码。

2.4编码实现

#include <iostream>

#include<string.h>

#include <list>

#include <string>

using namespace std;

class Worker     //定义Worker类

{

char name[10];   //姓名

    int age;          //年龄

    double salary;     //薪水

    public:

              Worker()

              {}

      Worker(char* n,int a,double s)  //构造函数

      {

          strcpy(name,n);     //把n中的字符复制给name

          age=a;       //a中的数值赋值给age

          salary=s;     //s中的数值赋值给salary

      }

      void SetData(char *Name,int Age,double wage )  //用于重置的函数

      {

          strcpy(name,Name);    //把Name中的字符复制给name

          age=Age;              //把Age中的数值赋值给age

          salary=wage;       //把wage中的数赋值给salary

      }

      void Display()          //用于输出的函数

      {

          cout<<"姓名:"<<name<<endl;

          cout<<"年龄:"<<age<<endl;

          cout<<"工资:"<<salary<<endl;

      }

};

   int main()

   {

      list<Worker*>p,q;

      list<Worker*>::iterator i;

      Worker a("杨",50,3000);

      Worker b("孙",44,3500);

         Worker c;

      c.SetData("倪",41,5000);

      p.push_back(&a);

      q.push_back(&b);

      for(i=p.begin();i!=p.end();i++)

      {

          (*i)->Display();

      }

      for(i=q.begin();i!=q.end();i++)

      {

          (*i)->Display();

      }

         while(!p.empty())

         {

                p.pop_front();

         }

        cout<<"重置之后的结果 :"<<endl;

        p.push_back(&c);

     for(i=p.begin();i!=p.end();i++)

      {

          (*i)->Display();

      }

     p.merge(q);

     cout<<"合并之后的结果:"<<endl;

     for(i=p.begin();i!=p.end();i++)

         (*i)->Display();

   }

2.5程序运行结果

设计心得:程序设计是一门考验耐心和细心的学科,需要很强的逻辑思维能力,尤其是指针部分,逻辑思维能力尤其重要。程序的编写是一个枯燥的过程,需要耐心和兴趣来支持。

参考文献:《C++面向对象程序设计(第二版)》 杜茂康等 电子工业出版社 2011.7

 

第二篇:面向对象程序设计实验报告一 (2)

《面向对象程序设计》上机实验报告

  1  次上机

 

班  级:  131112                    

学  号:  13111151                  

姓  名:  王悦                  

相关推荐