对象和类复习题(c++ prime plus )

第一题:

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

bank.h

#ifndef BACK_H_
#define BACK_H_
#include <string>

class Bankaccount
{
    private:
        std::string accountname;//用户名称
        std::string username;//用户名字
        double money;
    public:
        Bankaccount(const std::string username,const std::string accountname,double money);//默认析构函数
        void show() const;//表示函数
        void deposit(double cash);//存钱
        void withdraw(double cash);//取钱
};


#endif

bank.cpp

#include <iostream>
#include "bank.h"

Bankaccount::Bankaccount(const std::string username,const std::string accountname,double money)
{
    this->username=username;
    this->accountname=accountname;
    this->money=money;
}


void Bankaccount::deposit(double cash)
{
    if(cash>0)
    {
        money+=cash;
    }
    else
    {
        std::cout<<"Input is error"<<std::endl;
    }
}

void Bankaccount::withdraw(double cash)
{
    if(cash>0&&cash<money)
    {   
        money-=cash;
    }
    else
    {
        std::cout<<"输入的数字小于0或者大于本金!"<<std::endl;
    }
}


void Bankaccount::show() const
{
    using namespace std;
    cout<<"username="<<username<<endl;
    cout<<"accountname="<<accountname<<endl;
    cout<<"money="<<money<<endl;
}

userbank.cpp

#include <iostream>
#include "bank.h"

using namespace std;

int main()
{

    double money;
    
    Bankaccount myaccount("whp","whpazz",468.0);
    myaccount.show();
    cout<<"输入你的存款数额"<<endl;
    cin>>money;
    myaccount.deposit(money);
    myaccount.show();
    cin.ignore();
    cout<<"输入你的取款数额"<<endl;
    cin>>money;
    myaccount.withdraw(money);
    myaccount.show();
    return 0;

}

 第二题

它使用了一个string对象和一个字符数组,让您能够比较它们的用法。请提供未定义的方法的代码,以完成这个类的实现。再编写一个使用这个类的程序,它使用了三种可能的构造函数调用(没有参数、一个参数和两个参数)以及两种显示方法。下面是一个使用这些构造函数和方法的例子

person.h:

 

#ifndef PERSON_H_
#define PERSON_H_

#include <string>
#include <cstring>
class Person
{
    private:
        static const int LIMIT=25;
        std::string lname;
        char fname[LIMIT];
    public:
        Person(){lname="",fname[0]='\0';};
        Person(const std::string & ln,const char *fn="Hello");
        void show()const;
        void FormalShow()const;
};


#endif

 

person.cpp:

#include <iostream>
#include "person.h"

Person::Person(const std::string & ln,const char * fn)
{
    lname=ln;
    strcpy(fname,fn);
}

void Person::show() const
{
    std::cout<<"The lname is"<<lname<<std::endl;
}

void Person::FormalShow()const
{
    std::cout<<"The fname is"<<fname<<std::endl;
}

userperson.cpp:

#include <iostream>
#include "person.h"

using namespace std;

int main()
{
    Person myname;
    Person myname1("whp");
    myname.show();
    myname.FormalShow();
    cout<<"----------"<<endl;
    myname1.show();
    myname1.FormalShow();
    Person myname2("whp","whpazz");
    cout<<"----------"<<endl;
    myname2.show();
    myname2.FormalShow();
    return 0;

}

第三题:

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

golf.h

#ifndef GOLF_H_
#define GOLF_H_

const int Len=40;

class golf
{
    private:
        char fullname[Len];
        int handicap;
    public:
        
        golf(const char * fn,int ha);
        golf();
        void handicaps(int hc);
        void showgolf() const;
};





#endif

golf.cpp

#include <iostream>
#include "golf.h"
#include <cstring>


golf::golf(const char * fn,int ha)
{
    strcpy(fullname,fn);
    handicap=ha;

}


golf::golf()
{
    char temp[40];
    int hc;
    std::cout<<"请输入你的名字"<<std::endl;
    std::cin.getline(temp,40);
    std::cin.ignore();
    std::cout<<"请输入你的handicap:"<<std::endl;
    std::cin>>hc;
    *this=golf(temp,hc);

}

void golf::handicaps(int ha)
{
    handicap=ha;
}

void golf::showgolf()const
{
    std::cout<<"名字:"<<fullname<<std::endl;
    std::cout<<"handicap"<<handicap<<std::endl;
}

usergolf.cpp

#include <iostream>
#include "golf.h"


int main()
{
    golf mygolf("whp",468);
    mygolf.showgolf();
    std::cout<<"------------------"<<std::endl;
    golf mygolf1;
    mygolf1.showgolf();
    std::cout<<"------------------"<<std::endl;
    mygolf1.handicaps(200);
    mygolf1.showgolf();
    return 0;
}

 第四题

完成第9章的编程练习4,但将Sales结构及相关的函数转换为一个类及其方法。用构造函数替换setSales(sales &, double [], int)函数。用构造函数实现setSales(Slaes &)方法的交互版本。将类保留在名称空间SALES 中。

setsale.h

 

#ifndef SETSALE_H_
#define SETSLE_H_

namespace SALES
{


    class sale
    {
        private:
        double sales[4];
        double average;
        double max;
        double min;
    public:
        sale();
        sale(const double ar[],int n);
        void shawSales()const ;
    };


}


#endif

 

setsale.cpp

#include <iostream>
#include "setsale.h"



namespace SALES
{
    sale::sale(const double ar[],int n)
    {
        if(n<4)
        {
            for(int i=0;i<n;i++)
            {
                sales[i]=ar[i];
            }
            for(int j=n;j<4;j++)
            {
                sales[j]=0;
            }
        }
        else
        {
            for(int i=0;i<4;i++)
            {
                sales[i]=ar[i];
            }
        }
        average=(sales[0]+sales[1]+sales[2]+sales[3])/4;
        max=0.0;
        min=10000.0;
        for(int i=0;i<4;i++)
        {
            if(sales[i]>max)
            {
                max=sales[i];
            }
            if(sales[i]<min)
            {
                min=sales[i];
            }
        }
    }

    sale::sale()
    {
        using namespace std;
        cout<<"请输入你的sale!"<<endl;
        for(int i=0;i<4;i++)
        {
            cin>>sales[i];
        }
        average=(sales[0]+sales[1]+sales[2]+sales[3])/4;
        max=0.0;
        min=10000.0;
        for(int i=0;i<4;i++)
        {
            if(sales[i]>max)
            {
                max=sales[i];
            }
            if(sales[i]<min)
            {
                min=sales[i];
            }
        }
    }
    void sale::shawSales() const
    {
        using namespace std;
        cout<<sales[0]<<"--"<<sales[1]<<"--"<<sales[2]<<"--"<<sales[3]<<"--"<<endl;
        cout<<"average="<<average<<endl;
        cout<<"max="<<max<<"    "<<"min="<<min<<endl;
    }
}

usersetsales.cpp

#include <iostream>
#include "setsale.h"



using namespace std;
using namespace SALES;

int main()
{
    double arc[10]={9.0,10.0,10.0,10.0,10.0,10.0};
    sale mysale(arc,10);
    mysale.shawSales();
    cout<<"------------------"<<endl;
    sale mysale1;
    mysale1.shawSales();
    return 0;
    
}

第五题

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

stack.h

#ifndef STACK_H_
#define STACK_H_

struct customer
{
    char fname[40];
    double payment;
};

typedef customer Item;

class Stack
{
    private:
        Item items[3];
        int top;
    public:
        Stack();
        bool push(const Item & item);
        bool pop(Item & item);
        bool isfull()const;
        bool isempty() const;
};




#endif

stack.cpp

#include <iostream>
#include "stack.h"


Stack::Stack()
{
    top=0;
}


bool Stack::isempty()const
{
    return top==0;
}

bool Stack::isfull()const
{
    return top==3;
}

bool Stack::push(const Item & item)
{
    if(top<3)
    {
        items[top++]=item;
        return true;
    }
    else
    {
        return false;
    }
    
}


bool Stack::pop(Item & item)
{
    if(top<0)
    {
        return false;
    }
    else
    {
        item=items[--top];
        return true;
    }
}

userstack.cpp

#include <iostream>
#include "stack.h"

using namespace std;

int main()
{
    Stack tk;
    double totalpayment=0.0;
    customer temp;
    cout<<"1.....>入栈"<<endl;
    cout<<"2'''''>出栈"<<endl;
    char c;
    int sign;
    cout<<"是否开始"<<endl;
    while(cin>>c&&c=='y')
    {
        cin>>sign;
        cin.ignore();
        switch(sign)
        {
            case 1:
                    cout<<"输入你的名字"<<endl;
                    cin.getline(temp.fname,40);
                    //cin.ignore();
                    cout<<"输入你的支付的数目"<<endl;
                    cin>>temp.payment;
                    if(tk.isfull())
                    {
                        cout<<"栈以满"<<endl;
                    }
                    else
                    {
                        tk.push(temp);
                    }
                    break;
            case 0:
                    if(tk.isempty())
                    {
                        cout<<"栈为空栈"<<endl;
                    }
                    else
                    {
                        totalpayment+=temp.payment;
                        tk.pop(temp);
                        cout<<"开始退栈"<<temp.fname<<endl;
                    }
                    break;
        }
        cout<<"是否开始"<<endl;
    }
    cout<<"totalpayment="<<totalpayment<<endl;
    return 0;
}

 第六题

Move.h

 

#ifndef MOVE_H_
#define MOVE_H_


class Move
{
    private:
        double x;
        double y;
    public:
        Move(double a=0.0,double b=0.0);
        Move & add(const Move & m) const;
        void showmove()const;
        void reset(double a=0,double b=0);
};



#endif

 

Move.cpp

#include <iostream>
#include "Move.h"
using namespace std;

Move::Move(double a,double b)
{
    x=a;
    y=b;
}

Move & Move::add(const Move & m) const
{
    static Move ns;
    ns.x=m.x+this->x;
    ns.y=m.y+this->y;
    return ns;
}


void Move::reset(double a,double b)
{
    x=a;
    y=b;
}


void Move::showmove()const
{
    cout<<"x="<<x<<std::endl;
    cout<<"y="<<y<<std::endl;
}

UserMove.cpp

#include <iostream>
#include "Move.h"

using namespace std;
int main()
{
    Move m0(2.5,2.5);
    Move m1(1.5,1.5);
    double a,b;
    cout<<"输入a,b"<<endl;
    cin>>a;
    cin>>b;
    Move m2(a,b);
    m2=m2.add(m0);
    cout<<"M0为"<<endl;
    m0.showmove();
    cout<<"M1为"<<endl;
    m1.showmove();
    cout<<"更新为"<<endl;
    m2.showmove();
    return 0;
}

第七题

Betelgeusean plorg有这些特征。

数据:

plorg的名称不超过19个字符;
plorg有满意指数(CI),这是一个整数。
操作:

新的plorg将有名称,其CI值为50;
plorg的CI可以修改;
plorg可以报告其名称和CI;
plorg的默认名称为“Plorga”。

plorg.h

#ifndef PLORGH_H_
#define PLORGH_H_

class Plorg
{
    private:
        char fnam[20];
        int CI;
    public:
        Plorg();
        void rwrite(const char * str,int CIS);
        void show_cls()const;

};



#endif

ploorg.cpp

 

#include <iostream>
#include "plorg.h"
#include <cstring>

Plorg::Plorg()
{
    strcpy(fnam,"whp");
    CI=50;
}


void Plorg::rwrite(const char * str,int CIS)
{
    strcpy(fnam,str);
    CI=CIS;
}


void Plorg::show_cls()const
{
    using namespace std;
    cout<<"Fname="<<fnam<<endl;
    cout<<"CI="<<CI<<endl;
}

 

userplogry.cpp

#include <iostream>
#include "plorg.h"


int main()
{
    Plorg mtct;
    mtct.show_cls();
    mtct.rwrite("wer",52);
    mtct.show_cls();
    return 0;
}

 

posted @ 2022-07-29 14:35  术术子  阅读(56)  评论(0编辑  收藏  举报