使用抛出的构造函数创建类的对象

时间:2014-06-12 13:21:16

标签: c++ exception c++11

我正在学习异常..示例代码的目的是创建一个合适的对象。 这就是......

#include <iostream>
#include <exception>
#include <string>
#include <stdexcept>

using std::string;
using std::invalid_argument;
using std::cin;
using std::cout;
using std::endl;

class Person
{
public:
    Person(){}
    Person(string name, int age)
    {
        if (age < 18)
            throw invalid_argument(name + " is minor!!!");
        if (name.empty())
            throw invalid_argument("Name can't be empty");
        _name = name;
        _age = age;
    }
    Person(Person&& that) : _name(std::move(that._name))
    {
        _age = that._age;
        that._name.clear();
    }
    Person& operator=(Person&& that)
    {
        _name = std::move(that._name);
        _age = that._age;
        that._name.clear();
        return *this;
    }

    Person(const Person& that)
    {
        _age = that._age;
        _name = that._name;
    }
    Person& operator=(const Person& that)
    {
        _name = that._name;
        _age = that._age;
        return *this;
    }

    ~Person() { cout << "In person destructor"; }
    string getName(void) const { return _name; }
private:
    string _name;
    int _age;
};

Person createPerson()
{
    try
    {
        string name;
        int age;
        cout << "Enter name of the person: ";
        cin >> name;
        cout << "Enter age of the person: ";
        cin >> age;
        Person aNewPerson(name, age);
        return aNewPerson;
    }
    catch (invalid_argument& e)
    {
        cout << e.what() << endl;
        cout << "Please try again!!!" << endl;
    }
}

int main(void)
{
    Person aNewPerson;

    aNewPerson = createPerson();

    cout << aNewPerson.getName() << " created" << endl;

    return 0;
}

我只想在构造正确的对象时退出程序。 例如,如果我输入名称为APerson并且年龄为1,则抛出异常。 但是,我想继续创建对象并在成功创建对象后退出程序。

我没有得到怎么做。 有人可以帮忙吗? 感谢。

1 个答案:

答案 0 :(得分:0)

好的,我得到了答案,如果我错了请纠正我... 我像这样修改了createPerson()函数......

Person createPerson()
{
    while (1)
    {
        try
        {
            string name;
            int age;
            cout << "Enter name of the person: ";
            cin >> name;
            cout << "Enter age of the person: ";
            cin >> age;
            Person aNewPerson(name, age);
            return aNewPerson;
        }
        catch (invalid_argument& e)
        {
            cout << e.what() << endl;
            cout << "Please try again!!!" << endl;
        }
    }
}