首页 > 解决方案 > 重载函数

问题描述

所以我有这3个功能:

void bookings(const std::string name, const Date& date)const;
void bookings(const std::string name)const;
void bookings(const Date& date)const;

我想以 3 种不同的方式使用它们。首先,如果我传递名称和日期以使用第一个函数。其次,如果我只传递名称以使用第二个函数,并且如果我只传递日期以使用第三个函数。我正在使用控制台来传递参数。有没有办法做到这一点?我写这个:

std::string event, name;
        int d, m, y;
        std::cout << "event: ";
        std::getline(std::cin, event);
        std::cout << "date: ";
        std::cin >> d >> m >> y;
        if (event == "")
        {
            bookings(Date(d, m, y));
        }
        else if (d > 0 && m>0 && y>0) 
        {
            bookings(event, Date(d, m, y));
        }
        else
        {
            bookings(event);
        }

但在我没有通过日期的情况下不起作用。我知道这与日期的参数有关,在这种情况下它们没有定义。有没有什么办法解决这一问题?

标签: c++functionarguments

解决方案


您可以使用 getline 将日期作为字符串获取,而不是检查它们是否已设置:

    std::string event, name;
    std::string sD, sM, sY;

    int d, m, y;
    d = m = y = 0;

    std::cout << "event: ";
    std::getline(std::cin, event);

    std::cout << "date: ";
    std::getline(std::cin, sD);
    std::getline(std::cin, sM);
    std::getline(std::cin, sY);

    if(!sD.empty() && !sM.empty() && !sY.empty())
    {
        d = atoi(sD.c_str());
        m = atoi(sM.c_str());
        y = atoi(sY.c_str());
    }

    if (event == "")
    {
        bookings(Date(d, m, y));
    }
    else if (d > 0 && m>0 && y>0) 
    {
        bookings(event, Date(d, m, y));
    }
    else
    {
        bookings(event);
    }

推荐阅读