O uso da classe range será exclusivamente de matrix, por este motivo decidi que ela deveria ser implementada dentro do escopo da classe, já que ela é um comportamento da mesma. A ideia surgiu de implementações de árvores binárias e listas encadeadas, ambas as classes possuem objetos que auxiliam e caracterizam o comportamento da mesma, no caso da árvore seria uma classe ou struct node(nó) e no caso da lista uma classe ou struct cell(célula). Essas classes não tem significado fora da classe que as implementam e são completamente inúteis. No caso gostaria que a implementação seguisse os seguintes padrões para classes auxialres:
class C {
public:
C() (sometype somearg) : somemember(somearg) {}; /*A implementação dos construtores deve ser feita em lista, isso facilita o C++ a reconhecer os objetos.*/
~C();
void somemethod();
//A classe será pública se, e somente se, você precisar chamar ela fora do escopo da classe.
class publicAuxClass {
friend class C //Em caso da classe necessitar acessar elementos privados.
public:
publicAuxClass(sometype somearg) : publicAuxClass_member(somearg) {};
sometype somemember(sometype args); /*Deixe as implementações no cpp, com excessão do construtor que deve ser de lista e constar no .h*/
/*Os membros devem ser públicos ou privados de acordo com a utilidade da classe, se forem privados a classe deve ser friend da classe auxiliar.*/
sometype publicAuxClass_member;
}
private:
/*A classe deverá ser private se, e somente se, você utiliza-lá para definir um comportamento mais específico
da classe em questão, nesse caso a classe deve possuir um ponteiro da classe auxiliar como membro privado.*/
class privateAuxClass {
//As definições devem ser feitas conforme a publicAuxClass.
}
privateAuxClass* aux; //Para poder usar as caraterísticas da classe privada.
}