Skip to content

Latest commit

 

History

History
133 lines (108 loc) · 4.81 KB

readme.md

File metadata and controls

133 lines (108 loc) · 4.81 KB

1.对于下面的类声明:

    class Cow {
        char name[20];
        char * hobby;
        double weight;
    public:
        Cow();
        Cow(const char * nm, const char * ho, double wt);
        Cow(const Cow c&);
        ~Cow();
        Cow & operator=(const Cow & c);
        void ShowCow() const; // display all cow data
    };

给这个类提供实现,并编写一个使用所有成员函数的小程序。

2.通过完成下面的工作来改进String类声明(即将String1.h升级为String2.h)。

a.对+运算符进行重载,使之可将两个字符串合并成1个。

b.提供一个Stringlow( )成员函数,将字符串中所有的字母字符转换为小写(别忘了cctype系列字符函数)。

c.提供String( )成员函数,将字符串中所有字母字符转换成大写。

d.提供一个这样的成员函数,它接受一个char参数,返回该字符在字符串中出现的次数。

使用下面的程序来测试您的工作:

    // pe12_2.cpp
    #include <iostream>
    using namespace std;
    #include "string2.h"
    int main()
    {
        String s1(" and I am a C++ student.");
        String s2 = "Please enter your name: ";
        String s3;
        cout << s2; // overloaded << operator
        cin >> s3; // overloaded >> operator
        s2 = "My name is " + s3; // overloaded =, + operators
        cout << s2 << ".\n";
        s2 = s2 + s1;
        s2.stringup(); // converts string to uppercase
        cout << "The string\n" << s2 << "\ncontains " << s2.has('A')
        << " 'A' characters in it.\n";
        s1 = "red"; // String(const char *),
        // then String & operator=(const String&)
        String rgb[3] = { String(s1), String("green"), String("blue") };
        cout << "Enter the name of a primary color for mixing light: ";
        String ans;
        bool success = false;
        while (cin >> ans)
        {
            ans.stringlow(); // converts string to lowercase
            for (int i = 0; i < 3; i++)
            {
                if (ans == rgb[i]) // overloaded == operator
                {
                    cout << "That's right!\n";
                    success = true;
                    break;
                }
            }
            if (success)
                break;
            else
                cout << "Try again!\n";
        }
        cout << "Bye\n";
        return 0;
    }

输出应与下面相似:

    Please enter your name: Fretta Farbo
    My name is Fretta Farbo.
    The string
    MY NAME IS FRETTA FARBO AND I AM A C++ STUDENT.
    contains 6 'A' characters in it.
    Enter the name of a primary color for mixing light: yellow
    Try again!
    BLUE
    That's right!
    Bye

3.新编写程序清单10.7和程序清单10.8描述的Stock类,使之使用动态分配的内存,而不是string类对象来存储股票名称。另外,使用重载的operator < <()定义代替show()成员函数。再使用程序清单10.9测试新的定义程序。

4.请看下面程序清单10.10定义的Stack类的变量:

    // stack.h -- class declaration for the stack ADT
    typedef unsigned long Item;
    class Stack
    {
    private:
        enum {MAX = 10}; // constant specific to class
        Item * pitems; // holds stack items
        int size; // number of elements in stack
        int top; // index for top stack item
    public:
        Stack(int n = MAX); // creates stack with n elements
        Stack(const Stack & st);
        ~Stack();
        bool isempty() const;
        bool isfull() const;
        // push() returns false if stack already is full, true otherwise
        bool push(const Item & item); // add item to stack
        // pop() returns false if stack already is empty, true otherwise
        bool pop(Item & item); // pop top into item
        Stack & operator=(const Stack & st);
    };

正如私有成员表明的,这个类使用动态分配的数组来保存栈项。请重新编写方法,以适应这种新的表示法,并编写一个程序来演示所有的方法,包括复制构造函数和赋值运算符。

5.Heather银行进行的研究表明,ATM客户不希望排队时间不超过1分钟。使用程序清单12.10中的模拟,找出要使平均等候时间为1分钟,每小时到达的客户数应为多少(试验时间不短于100小时)?

6.Heather银行想知道,如果再开设一台ATM,情况将如何。请对模拟进行修改,以包含两个队列。假设当第一台ATM前的排队人数少于第二台ATM时,客户将排在第一队,否则将排在第二队。然后再找出要使平均等候时间为1分钟,每小时到达的客户数应该为多少(注意,这是一个非线性问题,即将ATM数量加倍,并不能保证每小时处理的客户数量也翻倍,并确保客户等候的时间少于1分钟)?