- String::String(const String &st)
- {
- num_string++;
- len = st.len;
- str = new char[len + 1];
- std::strcpy(str,st.str);
- }
- String &String::operation=(const String &st)
- {
- if(this == &st)
- return *this;
- delete[] str;
- len = st.len;
- str = new char[len +1];
- std::strcpy(str,st.str);
- return *this;
- }
1、返回指向const对象的引用
const Vector &Max(const Vector &v1,const Vector &v2)
2、返回指向非const对象的引用
operator重载函数
std::ostream &operator<< (std::ostream &os,const Vector &v)
3、返回对象
Vector Vector::operator+(const Vector &b) const
4、返回const对象
队列类特征
对于const类成员,必须使用成员初始化列表语法。对于被声明为引用的类成员也是如此。
- class Agency {...}
-
- class Agent
- {
- private:
- Agency &belong;
- const int cnt;
- }
-
- Agent::Agent(Agency &a,int num):belong(a),cnt(num)
- {
- ...
- }
示例代码
queue.h
- #ifndef QUEUE_H_
- #define QUEUE_H_
-
- class Customer
- {
- private:
- long arrive;
- int processtime;
- public:
- Customer() {arrive = processtime = 0;};
- void set(long when);
- long when() const {return arrive;};
- int ptime() const {return processtime;};
- };
-
- typedef Customer Item;
-
- class Queue
- {
- enum {Q_SIZE = 10};
- private:
- struct Node {Item item;struct Node* next;};
- Node* front;
- Node* rear;
- int items;
- const int qsize;
-
- Queue(const Queue &q):qsize(0) {};
- Queue &operator=(const Queue &q) {return *this;};
- public:
- Queue(int qs = Q_SIZE);
- ~Queue();
- bool isempty() const;
- bool isfull() const;
- int queuecount() const;
- bool enqueue(const Item &item);
- bool dequeue(Item &item);
-
- };
-
- #endif
queue.cpp
- #include "queue.h"
- #include <cstdlib>
- #include <iostream>
-
- Queue::Queue(int qs):qsize(qs)
- {
- front = rear = NULL;
- items = 0;
- }
-
- Queue::~Queue()
- {
- Node* temp;
- while(front != NULL)
- {
- temp = front;
- front = front->next;
- delete temp;
- }
- }
-
- bool Queue::isempty() const
- {
- return items == 0;
- }
-
- bool Queue::isfull() const
- {
- return items == qsize;
- }
-
- int Queue::queuecount() const
- {
- return items;
- }
-
- bool Queue::enqueue(const Item &item)
- {
- //std::cout << "enqueue B" <<std::endl;
- if(isfull())
- {
- return false;
- }
- Node* add = new Node;
- add->item = item;
- add->next = NULL;
-
- items++;
- if(front == NULL)
- front =add;
- else
- {
- rear->next = add;
- }
-
- rear = add;
- //std::cout << "front:" << front <<"rear :" << rear <<std::endl;
- return true;
- }
-
- bool Queue::dequeue(Item &item)
- {
- //std::cout << "dequeue B" <<std::endl;
-
- if(isempty())
- {
- return false;
- }
- //std::cout << "items :" << items <<std::endl;
-
- item = front->item;
- items--;
- Node* temp = front;
- front = front->next;
- delete temp;
- if(items == 0)
- rear = NULL;
- //std::cout << "front:" << front <<"rear :" << rear <<std::endl;
- //std::cout << "dequeue A"<<std::endl;
- return true;
- }
-
- void Customer::set(long when)
- {
- processtime = std::rand() %3 +1;
- arrive = when;
- }
-
bank.cpp
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- #include "queue.h"
-
- using namespace std;
- const int MIN_PER_HR = 60;
-
- bool newcustomer(double x);
-
- int main()
- {
- srand(time(0));
- cout << "enter maximun size of queue:";
- int qs;
- cin >> qs;
- Queue line(qs);
-
- cout << "Enter the number of simulation hours:";
- int hours;
- cin >> hours;
- long cyclelimit = MIN_PER_HR * hours;
-
- cout << "enter the average number of customers per hour:";
- double perhour;
- cin >> perhour;
- double min_per_cust;
- min_per_cust = MIN_PER_HR/perhour;
-
- Item temp;
- long turnaways = 0;
- long customers = 0;
- long served = 0,sum_line = 0,wait_time = 0,line_wait = 0;
- for(int cycle = 0;cycle < cyclelimit;cycle++)
- {
- if(newcustomer(min_per_cust))
- turnaways++;
- else
- {
- customers++;
- temp.set(cycle);
- line.enqueue(temp);
- }
- if(wait_time <= 0 && !line.isempty())
- {
- line.dequeue(temp);
- wait_time = temp.ptime();
- line_wait += cycle - temp.when();
- served++;
- }
- if(wait_time > 0)
- wait_time--;
- sum_line += line.queuecount();
- }
- if(customers > 0)
- {
- cout << "customers accepted: " << customers << endl;
- cout << " customers served: " << served << endl;
- cout << " turnaways: " << turnaways << endl;
- cout << "average queue size: ";
- cout.precision(2);
- cout.setf(ios_base::fixed,ios_base::floatfield);
- cout << (double)sum_line/cyclelimit << endl;
- cout << " average wait time:" << (double)line_wait/served << " minutes\n";
- }
- else
- cout <<"No customers!\n";
- cout << "Done\n";
-
- return 0;
-
- }
-
- bool newcustomer(double x)
- {
- return (rand()*x/RAND_MAX < 1);
- }