Не могу придумать реализацию для класса молекул на c++

Есть класс Atom, содержащий данные о атоме. Есть фабрика, создающая атомы по списку образцов, записанных в отдельном файле.

class Atom {
protected:
    unsigned int id;
    std::string name;
    std::string abbreviation;
    Vec3 position;
    friend class AtomFactory;
public:
    Atom(int id = 0, std::string name = "Pivo", std::string abbreviatio = "Pi", Vec3 position = Vec3(0.0f, 0.0f, 0.0f)) : id(id), name(name), abbreviation(abbreviatio), position(position) {
    }
    Atom operator = (Atom atomCopy) {
        return Atom(atomCopy.id, atomCopy.name, atomCopy.abbreviation);
    }
    unsigned int GetId() {
        return id;
    }
    std::string GetName() {
        return name;
    }
    std::string GetAbbreviation() {
        return abbreviation;
    }
};

class AtomFactory {
    std::vector<Atom> vcAtoms;
    int errorcode = 0;
    int totalAtoms = 0;
public:
    AtomFactory(std::string path) {
        std::ifstream ifsAtomsList(path);
        if (!ifsAtomsList.is_open()) {
            errorcode = MLC_ERROR_EMPTYFILE;
            ifsAtomsList.close();
            return;
        }
        Atom atomFilled;

        while (!ifsAtomsList.eof()) { 
            ifsAtomsList >> atomFilled.id;
            ifsAtomsList >> atomFilled.name;
            ifsAtomsList >> atomFilled.abbreviation;
            atomFilled.position = Vec3(0.0f, 0.0f, 0.0f);
            vcAtoms.push_back(atomFilled);
            totalAtoms++;
        }

        ifsAtomsList.close();
    }
    virtual Atom* CreateAtom(int id) {
        if (id <= 0 || id > totalAtoms)
            return nullptr;
        return new Atom(vcAtoms[id - 1]);
    }
    int GetError() {
        return errorcode;
    }
    int GetTotalAtoms() {
        return totalAtoms;
    }
};

Никак не могу придумать более удачную реализацию для класса молекул, которая будет хранить все атомы и их соединения. Если что программа будет отрисовываться в ogl, поэтому хотел бы вытащить максимум эффективности из этого класса


Ответы (0 шт):