C++ 班级作业

C++ 班级作业,c++,class,exception,throw,C++,Class,Exception,Throw,我有点执着于完成这个项目 评估要求我们按照下面提供的信息,实施RockConcert和TicketHolder课程。课堂票证持有人代表为某场音乐会支付入场费的人。这个票务员课程应该记录它的费用和座位的位置 考虑到所提供的驱动程序,我已经构建了大部分代码,但如何编写RockConcert::sellTicket和RockConcert::getTicket的编码方法让我非常困惑 下面是代码 非常感谢 TicketHolder.h #ifndef TicketHolder_h #define Tic

我有点执着于完成这个项目

评估要求我们按照下面提供的信息,实施RockConcert和TicketHolder课程。课堂票证持有人代表为某场音乐会支付入场费的人。这个票务员课程应该记录它的费用和座位的位置

考虑到所提供的驱动程序,我已经构建了大部分代码,但如何编写RockConcert::sellTicket和RockConcert::getTicket的编码方法让我非常困惑

下面是代码

非常感谢

TicketHolder.h

#ifndef TicketHolder_h
#define TicketHolder_h
#include <string>
#include <iostream>

using namespace std;

class TicketHolder {

public:
    TicketHolder();
    TicketHolder( std::string seat, double cost );

    std::string getSeat() const;
    double getCost() const;

    friend std::ostream& operator<< (std::ostream& os, const TicketHolder & t);

private:
    std::string my_Seat;
    double my_Cost;
};

#endif
#ifndef RockConcert_h
#define RockConcert_h
#include <string>
#include <iostream>
#include <stdexcept>
#include "TicketHolder.h"
#include "SeatAlreadySold.h"
#include "SeatNotFound.h"

class RockConcert {

public:
    public:
    RockConcert( std::string date, std::string location );

    void sellTicket( std::string seat, double cost ) throw (SeatAlreadySold);
    TicketHolder getTicket( std::string seat ) throw (SeatNotFound);
    double getProceeds( );

    friend std::ostream& operator<< ( std::ostream& out, const RockConcert & r );


private:
        TicketHolder myTickets[ 20 ];
        int myNumberOfTicketsSeenSoFar;
        std::string my_When;
        std::string my_Where;

    };

#endif
\ifndef TicketHolder\u h
#定义TicketHolder_h
#包括
#包括
使用名称空间std;
类票夹{
公众:
TicketHolder();
票夹(标准:弦座,双倍成本);
std::字符串getSeat()常量;
双getCost()常量;

friend std::ostream&operator我不确定这里到底是什么问题,但我倾向于创建一个
std::map
映射票证ID(可以是一个类似“Row##Seat####Seat#的字符串,只要你是一致的)到
TicketHolder
实例。你的
TicketHolder
类(我认为最好只命名为
Ticket
)应该包含一个布尔值“sell”属性

在您的
getTicket()
方法中,在
std::map
中进行一次简单的查找就可以了,而且速度非常快

您的
sellTicket()
方法应首先调用
getTicket()
,然后检查返回的票证的“已售出”属性(如果已售出,则引发异常)。如果未售出,则设置
TicketHolder::sell=true
。您还应将票证成本添加到目前为止的总收益中

其他可能有用的一般规则:

  • 尽可能在构造函数中使用初始化列表
  • 避免C++中的异常说明符,它们可能不执行你认为的
  • 除非您真的知道自己在做什么,否则始终按值抛出异常,并按常量引用捕获
  • 避免复制函数参数中的
    std::string
    s和其他复杂对象
  • 同样,仔细考虑方法返回类型何时应为副本、何时应为引用、何时应为常量引用以及何时应为(智能)指针

那么,问题是什么?@soon“我对如何编写RockConcert::sellTicket和,RockConcert::getTicket的编码方法感到非常困惑”@brorez这不是一个问题,这是一个声明。你尝试了什么,为什么没有成功?我们不是来为你做家庭作业的,更重要的是周日晚上的最后一件事。
#ifndef RockConcert_h
#define RockConcert_h
#include <string>
#include <iostream>
#include <stdexcept>
#include "TicketHolder.h"
#include "SeatAlreadySold.h"
#include "SeatNotFound.h"

class RockConcert {

public:
    public:
    RockConcert( std::string date, std::string location );

    void sellTicket( std::string seat, double cost ) throw (SeatAlreadySold);
    TicketHolder getTicket( std::string seat ) throw (SeatNotFound);
    double getProceeds( );

    friend std::ostream& operator<< ( std::ostream& out, const RockConcert & r );


private:
        TicketHolder myTickets[ 20 ];
        int myNumberOfTicketsSeenSoFar;
        std::string my_When;
        std::string my_Where;

    };

#endif
    #include "RockConcert.h"
    #include "TicketHolder.h"

    RockConcert::RockConcert( std::string date, std::string location ) {
        my_When = date;
        my_Where = location;
    }

    void RockConcert::sellTicket( std::string seat, double cost ) throw (SeatAlreadySold){

    }

    TicketHolder RockConcert::getTicket( std::string seat ) throw(SeatNotFound) {


    }

    double RockConcert::getProceeds( ){
        return (myNumberOfTicketsSeenSoFar);

    }

    std::ostream& operator<< ( std::ostream& out, const RockConcert & r ){
        return out;
    }
// driver
// function main
#include "TicketHolder.h"
#include "RockConcert.h"
#include <iostream>
#include <stdexcept>

int main(int argc, const char * argv[])

{
RockConcert megaDeath( "Sept 1", "Staples Center" );
megaDeath.sellTicket( "Row Q Seat 20", 120.00 );
megaDeath.sellTicket( "Row Q Seat 21", 120.00 );
megaDeath.sellTicket( "Row SSS Seat 12", 50.00 );
TicketHolder ticket = megaDeath.getTicket( "Row Q Seat 21" );

// Print out the concert and its tickets
std::cout << megaDeath << std::endl;


try {


    megaDeath.sellTicket( "Row T Seat 30", 65.00 );

} catch( SeatAlreadySold sas ) {

    std::cout << "An error occurred here for the reason:";
    std::cout << sas.what(std::endl:endl;
}

// Print out the library and its book - notice the difference
std::cout << megaDeath << std::endl;
// Let's try to throw some errors...
try {
    // can't sell a ticket that has already been sold
    megaDeath.sellTicket( "Row Q Seat 21", 120.00 );
    std::cout << "An error occurred here..." ;
} catch( SeatAlreadySold sas ) {
    sas.what();
}

try {
    // can't get a ticket that has not been sold
    megaDeath.getTicket( "Row A Seat 1" );
    std::cout << "An error occurred here..." ;
} catch( SeatNotFound snf ) {
    snf.what();
}

}