第一题:
代码如下:
#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.