如何使用某些创建对象的规则创建一个类?

时间:2018-02-03 14:08:08

标签: c++ class oop

我是一个noob工​​作我的基本业余爱好程序,我已经创建了一个类复合并添加了字符串 compundname ,但我想设计它的方式,当我把在compund字符串中的一些无效元素中,ex- NaMmO4 编译器不会让我创建对象,而是出现类似" Mm无效元素"

之类的错误

注意::我在这里只关注错误处理。

示例

  

复方钠盐{" NMmO4"}

编译器应该给出类似的错误 -

  

Mm是一个无效元素。无法创建对象。

1 个答案:

答案 0 :(得分:0)

您对编译器的工作以及编译器错误是什么感到困惑。

编译器错误主要是sintax错误和易于点错的运行错误,编译器不知道你在做什么。编写错误的字符串名称永远不会是编译器错误。此外,似乎名称将在运行时写入,这发生在编译时间之后。

可能想做这样的事情:

#include <iostream>
#include <exception>

using namespace std; 
//some people are heavily against it, but I think is easier to use it if you are a beginner. 

enum class elem_t{elem1, elem2, elem3};

class outOfBound: public exception
{
    virtual const char* what() const throw()
    {
        return "Error: Accessed an element that doesn't exists.";
    }
} noElem;


class Compound{
public:
    Compound(elem_t* elems, int size){_elems = elems; _size = size;} 
    //can't include something is not part of elem_t

    elem_t operator()(unsigned pos) const {if(pos < _size) return _elems[pos]; else throw noElem;}
    int size() const{return _size;}

private:
    elem_t* _elems;
    int _size;
};

int main()
{
    elem_t a[] = {elem_t::elem2, elem_t::elem1};
    Compound first(a,2);

    return 0;
}

我没有做的唯一基本事情是print()或运算符&lt;&lt;,但它应该很容易。