面向对象实例编程

第一题:
这里写图片描述

代码如下:

#include <iostream>
#include<stdio.h>
using namespace std;
class UniversityObject
{
    public:
        virtual char * getSummary() = 0;
};
class Student:public UniversityObject
{
    public:
        Student(char * name, char * stu_id);
        char * getSummary();
        ~Student(){delete[] summary;}
    private:
        char * Name;
        char * Stu_ID;
        char *summary;
};
Student::Student(char * name, char * stu_id)
{
    Name = name;
    Stu_ID = stu_id;
    summary = new char[4096];
}
char * Student::getSummary()
{
    sprintf(summary, "学号 %s, %s", Stu_ID, Name);
    return summary;
}
class LectureTheatre:public UniversityObject
{
    public:
        LectureTheatre(double room_num, int seat_num);
        char * getSummary();
        ~LectureTheatre(){delete[] summary;}
    private:
        double Room_num;
        int Seat_num;
        char *summary;
};
LectureTheatre::LectureTheatre(double room_num, int seat_num)
{
    Room_num = room_num;
    Seat_num = seat_num;
    summary = new char[4096];
}
char * LectureTheatre::getSummary()
{
    int i,d;
    i = (int)Room_num;
    d = (int)(Room_num * 1000 - i * 1000);
    sprintf(summary, "%d号楼%d, 共%d个座位", i, d, Seat_num);
    return summary;
}
class Module:public UniversityObject
{
    public:
        Module(char * title, char * code, int stu_num);
        char * getSummary();
        ~Module(){delete[] summary;}
    private:
        char * Title;
        char * Code;
        int  Stu_num;
        char *summary;
};
Module::Module(char * title, char * code, int stu_num)
{
    Title = title;
    Code = code;
    Stu_num = stu_num;
    summary = new char[4096];
}
char * Module::getSummary()
{
    sprintf(summary, "编号%s, 《%s》,%d人选修", Code, Title, Stu_num);
    return summary;
}
int main()
{
    UniversityObject *a1 = (UniversityObject *) new Student ("张三", "0320121113");
    UniversityObject *a2 = (UniversityObject *) new LectureTheatre (3.205, 186);
    UniversityObject *a3 = (UniversityObject *) new Module ("面向对象技术", "0321011", 185);
    printf("汇总结果:\n    学生: %s\n    教室: %s\n    课程: %s\n", a1->getSummary(),a2->getSummary(),a3->getSummary());
    return 0;
}

第二题:
这里写图片描述

代码如下:

#include <iostream>
using namespace std;
const int Capacity = 30;
template <class T> class CQueue
{
    public:
        CQueue(){Queue = new T[Capacity];}
        void init(){front = rear = 0;}
        int size(); //current size
        bool EnQueue(T e);//enter element
        bool DeQueue(T &e);//delete element
        bool GetElement(int i, T &e);//get element
        ~CQueue(){delete[] Queue;}
    private:
        int front;
        int rear;
        T *Queue;
};
template <class T>
int CQueue<T>::size()
{
    return (rear - front + Capacity) % Capacity;
}
template <class T>
bool CQueue<T>::EnQueue(T e)
{
    if((rear+1) % Capacity == front)//CQueue is full
        return false;
    Queue[rear] = e;
    rear = (rear+1) % Capacity;
    return true;
}
template <class T>
bool CQueue<T>::DeQueue(T &e)
{
    if(front==rear)//CQueue is empty
        return false;
    e = Queue[front];
    front = (front+1) % Capacity;
    return true;
}
template <class T>
bool CQueue<T>::GetElement(int i, T &e)
{
    if(i<1||i>size())
        return false;
    e = Queue[i-1];
    return true;
}

int main()
{
    int elem,in,index;
    char YorN1, YorN2;
    CQueue<int> q;
    q.init();
    cout<<"Enter 10 elements automatically:"<<endl;
    for(int i=1;i<=10;i++)
    { //Enter elements automatically
        q.EnQueue(i*2);
        cout<<i*2<<" ";
    }
    cout<<endl<<"The number of the valid elements: "<<q.size()<<endl<<endl;
    while(q.size() < Capacity)
    {
        cout<<"Do you wanna enter a number by yourself? y/n: ";
        cin>>YorN1;
        if(YorN1=='y')
        {
            cout<<"Enter a number: ";
            cin>>in;
            if(q.EnQueue(in))
            {
                cout<<"Successful enter: "<<in<<endl;
            }
        }
        else break;
    }
    cout<<endl<<"The number of the valid elements: "<<q.size()<<endl;
    for(int j=1;j<=q.size();j++)
    { //Get all elements
        if(q.GetElement(j, elem))
            cout<<"Queue["<<j<<"]:"<<elem<<endl;
    }
    cout<<endl;
    while(1)
    {
        cout<<"Do you wanna get an element? y/n: ";
        cin>>YorN2;
        if(YorN2=='y')
        {
            cout<<"Enter the index of the element:";
            cin>>index;
            if(q.GetElement(index, elem))
                cout<<"Queue["<<index<<"]:"<<elem<<endl;
        }
        else break;
    }
    cout<<endl<<"Delete elements from the CQueue:"<<endl;
    while(q.size())
    {
        q.DeQueue(elem);
        cout<<elem<<" ";
    }
    cout<<endl;
    if(!q.DeQueue(elem))
        cout<<"CQueue is empty"<<endl<<endl;
    cout<<"Maxsize of the CQueue: "<<Capacity<<endl<<endl;
    return 0;
}

运行结果:

Enter 10 elements automatically:
2 4 6 8 10 12 14 16 18 20
The number of the valid elements: 10

Do you wanna enter a number by yourself? y/n: y
Enter a number: 5
Successful enter: 5
Do you wanna enter a number by yourself? y/n: y
Enter a number: 2
Successful enter: 2
Do you wanna enter a number by yourself? y/n: n

The number of the valid elements: 12
Queue[1]:2
Queue[2]:4
Queue[3]:6
Queue[4]:8
Queue[5]:10
Queue[6]:12
Queue[7]:14
Queue[8]:16
Queue[9]:18
Queue[10]:20
Queue[11]:5
Queue[12]:2

Do you wanna get an element? y/n: y
Enter the index of the element:3
Queue[3]:6
Do you wanna get an element? y/n: n

Delete elements from the CQueue:
2 4 6 8 10 12 14 16 18 20 5 2
CQueue is empty

Maxsize of the CQueue: 30


Process returned 0 (0x0)   execution time : 89.872 s
Press any key to continue.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值