如何验证数据类型输入

时间:2014-07-13 16:36:31

标签: c++ class exception queue

我有一个队列,我需要验证输入数据类型并处理异常,以防数据输入与队列中的数据类型相同,我该怎么做? main.cpp中

try {
    cout << "Insert character: ";
    cin >> ch;
    prova.push(ch);
} 
catch (wrong_insert& k) {
    k.allert();
};

这是推送功能:

template <class t>
void queue<t>::push(const t& entry)
{
    if(*I need this condition*) throw wrong_insert();
    if(empty())
    {
        head_insert(front_ptr, entry);
        rear_ptr = front_ptr;
    }
    else
    {
        insert(rear_ptr, entry);
        rear_ptr = rear_ptr->link();
    }
    ++count;
    cout << "Inserted!" << endl;
}

这是异常类:

class wrong_insert
{
public:
    wrong_insert() : message("Wrong data inserted!"){};
    void allert(){ cout << message;};
private:
    string message;
};

2 个答案:

答案 0 :(得分:1)

我想将此作为评论添加,但我不允许这样做,因为我还没有50个声誉。

我认为如果类型错误,它将不会首先编译。

答案 1 :(得分:0)

如果我理解你的问题,你就会问你如何检查没有人试图在char s的队列中插入一个整数。

答案是你不能,也不必在运行时这样做。由于C ++是一种强类型语言,因此无法编译数据类型不兼容的代码。完全允许将char转换为int并且不会生成错误,但是将int作为char传递可能会触发错误/警告,具体取决于具体情况。

但是请注意,在某些情况下,如果(a)使用强制转换专门要求它,或者(b)如果编译器可以知道整数的值足够小,则允许将整数传递给char适合char。这发生在编译时。 ( NB 根据您的C ++版本,此类自动转换可能会给您一个警告或错误,因此请注意您的警告。)

如果您计划将此队列与彼此继承的类一起使用,则您的问题变得更加相关,因为您可以将派生类型的对象作为基类类型的引用或指针传递。在这里你可以使用typeid运算符,但是知道这会触发RTTI(运行时类型识别)并使用一些额外的代码来混乱你的可执行文件。

C ++只是在你使用它时付出代价&#34;如果你需要它(并且性能不会受到太大影响),请使用它。