1.为复习题5描述的类提供方法定义,并编写一个小程序来演示所有的特性。

bankacc.h

#ifndef BANKACC_H_1#define BANKACC_H_1class Bank { char name[30]; char account[7]; double debt;public: Bank(); Bank(const char *co, const char *ac, double db = 0.0); ~Bank(); void show() const; void deposit(const double money); void withdrawal(const double money);};#endif // !BANKACC_H_1

bankacc.cpp

#include<iostream>#include<string>#include<cstring>#include"bankacc.h"using namespace std;Bank::Bank() { strcpy(name, "no name"); name[30] = '\0'; strcpy(account, "100000"); account[6] = '\0'; debt = 0.0;}Bank::Bank(const char *co, const char *ac, double db){ strncpy(name, co, 29); strncpy(account, ac,6); name[30] = '\0'; account[6] = '\0'; debt = db;}Bank::~Bank() { cout << "Your account has been deleted.Thank your for using our service.\n";}void Bank::show() const{ cout << "Account Name: " << name << endl; cout << "Account ID: " << account << endl; cout << "Debt: " << debt << endl;}void Bank::deposit(const double money){ debt += money; cout << "Your Debt:" << debt << endl; cout << "Thank you for using deposit service.Bye~\n";}void Bank::withdrawal(const double money) { if (money <= debt) { debt -= money; cout << "Your Debt: $" << debt << endl; } else cout << "Error, you do not have enough money.\n"; cout << "Thank you for using withdrawal service.Bye~\n";}

banker.cpp

#include<iostream>#include<string>#include<cstring>#include"bankacc.h"using namespace std;int main() { cout << "This is Bank example 1:" << endl; Bank banks1; banks1.show(); cout << "After depositing..."<<endl; double depos1 = 3692.21; banks1.deposit(depos1); cout << "After withdrawal..." << endl; banks1.withdrawal(1252.63); cout << "#########################################" << endl; double money2 = 8945.32; Bank banks2 = Bank("Yushuai Zhang", "H6365", money2); banks2.show(); cout << "After depositing..." << endl; double depos2 = 235.21; banks2.deposit(depos2); cout << "After withdrawal..." << endl; banks2.withdrawal(625.63); system("pause"); return 0;}

2.下面是一个非常简单的类定义:
(……代码省略……)
通过提供未定义的方法来完成这个类的实现。然后,编写一个使用这个类的程序,它使用了几种可能的构造函数调用(没有参数、一个参数和两个参数)以及两种显示方法。

person.cpp

#include<iostream>#include<string>#include<cstring>using namespace std;const int LIMIT = 25;class Person {private: string lname; char fname[LIMIT];public: Person(); Person(const string &ln, const char*fn = "Heyyou"); void Show() const; void FormalShow() const;};Person::Person(){ lname = ""; fname[0] = '\0';}Person::Person(const string & ln, const char *fn) { lname = ln; strncpy(fname, fn, LIMIT-1); fname[LIMIT - 1] = '\0';}void Person::Show()const { cout << fname << " " << lname << endl;}void Person::FormalShow() const { cout << lname << " " << fname << endl;}int main() { Person one; Person two("Smythecraft"); Person three("Dimwiddy", "Sam"); one.Show(); cout << endl; one.FormalShow(); cout << endl; two.FormalShow(); cout << endl; three.Show(); system("pause"); return 0;}

3.完成第9章的编程练习1,但要用正确的golf类声明替换那里的代码。用带合适参数的构造函数替换setgolf(golf &, const char *, int), 以提供初始值。保留setgolf()的交互版本,但要用构造函数来实现它(例如,setgolf()的代码应该获得数据,将数据传递给构造函数来创建一个临时对象,并将其赋给调用对象,即*this)。

golf.h

#ifndef GOLF_H#define GOLF_Hclass Golf {private: static const int Len = 40; char fullname[Len]; int handicap;public: Golf(const char * name = "HHHHHH", int hc = 10); ~Golf(); bool setGolf(); void sethandicap(int hc); void showGolf()const;};#endif // GOLF_H

golf.cpp

#include <iostream>#include <cstring>#include "golf.h"using namespace std;Golf::Golf(const char * name, int hc){ strncpy(fullname, name, 40); fullname[39] = '\0'; handicap = hc;}Golf::~Golf(){ cout << "Bye!" << endl;}bool Golf::setGolf(){ char fullname[Len]; int handicap; cout << "Please input the name of the golf player: "; cin.get(fullname, Len); if (cin) { cout << "Please input the handicap of the golf player: "; cin >> handicap; cin.get(); *this = Golf(fullname, handicap); return true; } else return false;}void Golf::sethandicap(int hc){ handicap = hc;}void Golf::showGolf()const{ std::cout << "hullname: " << fullname << ", \thandicap: " << handicap << std::endl;}

main.cpp

#include <iostream>#include "golf.h"using namespace std;int main(){ Golf one; Golf two; Golf three; one.showGolf(); // 默认构造函数 two.setGolf(); // 交互版本 two.showGolf(); two.sethandicap(5000); //成员函数 two.showGolf(); //成员函数 three.sethandicap(20); three.showGolf(); system("pause"); return 0;}

5.考虑下面的结构声明:

struct customer {       char fullname[35];       double payment;};

 

编写一个程序,它从栈中添加和删除customer结构(栈用Stack类声明表示)。每次customer结构被删除时,其payment的值都被加入到总数中,并报告总数。注意:应该可以直接使用Stack类而不作修改;只需修改typedef声明,使Item的类型为customer,而不是unsigned long即可

stack.h

#pragma once#ifndef STACK_H_#define STACK_H_typedef struct customer{ char fullname[35]; double payment;}CUSTOMER;typedef customer Item;class Stack{private: enum { MAX = 10 }; Item items[MAX]; int top; int total;public: Stack(); ~Stack(); bool isempty()const; bool isfull()const; bool push(const Item & item); bool pop(Item & item); };#endif // STACK_H_

static.cpp

#include <iostream>#include "stack.h"using namespace std;Stack::Stack() { top = 0; total = 0;}Stack::~Stack(){ cout << "Bye!\n";}bool Stack::isempty()const{ return top == 0;}bool Stack::isfull()const{ return top == MAX;}bool Stack::push(const Item & item){ if (top < MAX) { items[top++] = item; return true; } else return false;}bool Stack::pop(Item & item){ if (top > 0) { item = items[--top]; total +=item.payment; cout << "PO#" << item.fullname << endl; cout << "Total = " << total << endl; return true; } else return false;}

main.cpp

#include <iostream>#include <cctype>#include "stack.h"int main(){ using namespace std; Stack st; // create an empty stack char ch; CUSTOMER po; cout << "Please enter A to add a purchase order.\n" << "P to process a PO,or Q to quit.\n"; while (cin >> ch && toupper(ch) != 'Q') { while (cin.get() != '\n') continue; if (!isalpha(ch)) { cout << '\a'; continue; } switch (ch) { case 'A': case 'a': cout << "Enter a PO fullname to add:\t"; cin.getline(po.fullname, 35); cout << "Enter a PO payment to add:\t"; cin >> po.payment; if (st.isfull()) cout << "stack already full\n"; else st.push(po); break; case 'P': case 'p':if (st.isempty()) cout << "Stack already empty\n"; else st.pop(po); break; } cout << "Please enter A to add a purchase order,\n" << "P to process a PO, or Q to quit.\n"; } cout << "Bye\n"; return 0;}

6. 根据类声明,提供成员函数的定义和测试这个类的程序。

#include<iostream>using namespace std;class Move{private: double x; double y;public: Move(double a = 0, double b = 0); void showmove()const; Move add(const Move &m)const; void reset(double a = 0, double b = 0);};Move::Move(double a, double b){ x = a; y = b;}void Move::showmove()const { cout << "x= " << x << endl; cout << "y= " << y << endl;}Move Move::add(const Move & m) const { return Move(x + m.x, y + m.y);}void Move::reset(double a, double b){ x = a; y = b;}int main() { Move move1; cout << "Move1:\n"; move1.showmove(); Move move2 = Move(2.3, 1.9); cout << "Move2:\n"; move2.showmove(); move1 = move1.add(move2); cout << "Move1 after adding move2:\n"; move1.showmove(); move1.reset(); move2.reset(); cout << "Reset Move1:\n"; move1.showmove(); cout << "Reset Move2:\n"; move2.showmove(); system("pause"); return 0;}

备注:

操作系统:Windows 10 x64(1803)

编译器:Microsoft Visual Studio 2015