Aventura com C++ – Tomorrow Never Dies

Publicado: 14/02/2005 em IntoSpaces
E aí como passaram o final de semana? Estava louco pra postar aqui do meu Pocket, mas acabei não tendo tempo, pow… afinal é final de semana né?

Mas hoje estou de volta e a Aventura Continua!!
Havia exposto pra vocês todo o meu problema e o cenário que tinha para trabalhar e me ferrar literalmente heehhe

Bom já de início digo, eu não peguei nenhum livro, então não vou dizer nada técnico sobre a sintaxe da linguagem para não falar nenhuma besteira, vou somente expor minha opnião sobre a maneira de se escrever código em C++, o que eu descobri analisando a documentação e com uma ótima ajuda do Intellisense do Visual Studio!! Esse sim é pai, não é padastro! eheh

Os apuros começam logo de cara ao se testar a linguagem, vendo que provenho do C# e VB.NET

O projeto do C++ .NET vem com diversos arquivos, arquivos .cpp, que são os fontes que serão compilados e os arquivos .h, os cabeçalhos e seguindo o padrão que o Visual Studio cria, trabalhoamos as classes nos headers(.h)

Até aí bem tranquilo, e observando um pouco o código fonte, vemos que existe uma separação de código interessante, onde podemos separar blocos de código pelos seus modificadores de acesso, public, private etc..

public:
    Form1(void)
    {InitializeComponent();}

protected:
     void Dispose(Boolean disposing)
     {
         if (disposing && components)
         {components->Dispose();}

      __super::Dispose(disposing);
      }

Podemos colocar nossos outros métodos e campos abaixo do identificador e ele será identificado como tal até que surja outro modificador, isso é muito legal e ainda podemos continuar usando como estamos acostumados, porém não existirá uma organização em nossos source codes

O próximo passo seria entender onde e como usar os amigos do nosso famoso ".", ponto.
Em C# e VB.NET a sintaxe do ponto e simplesmente ponto, facilita e agiliza a escrita, porém e C++ não é tão simples assim, porém não é nada do outro mundo.
Na linguagem temos :: -> e . para fazer o acesso aos membros das classes, o que pode-se perceber com um pouco de observação é o seguinte:

:: – utilizado para acessar membros Static das classes, assim como Enums etc
-> – utilizado para acessar membros de instância de uma classe
. – esse ainda está com a utilização desconhecida, pois nesse projeto simples não precisei, mas "ouvi dizer" que seria para Value Types, mas isso fica para uma próxima ocasião ok? Se alguém se habilitar, fique a vontade!

Outra consideração, declaramos todo mundo como Pointer, com o * após a classe, isso as vezes pode causar um pouco de confusão, como na declaração de um Array de String por exemplo:

String* Xrray[] = new String*[4];

Mas isso somente para quem não está acostumado com eles, nós que utilizamos linguagem de Alto nível eheheh

E já que tocamos na String, como já havia constatado no estudo da linguagem C, manipular strings em C++ é um saco…:/
Não existe por padrão um operador +, para fazer a concate nação de strings, utilizamos o método Concat da Classe System.String para assim fazer o trabalho, isso não é legal, mas é necessário…

String::Concat(Letra,";",MAC,String::Concat(";",IP,";",Nome));

Em meio a todas essas "novidades" comecei a trabalhar no projeto, e como já foi descrito acima eu teria que trabalhar com um arquivo de texto gerado pelo Linux para configuração bom então para deixar um pouco mais elegante resolvi criar uma classe para representar as linhas desse arquivo, onde utilizei esses recursos que citei acima:

using
namespace System;
namespace MacVerify
{
  
__gc public class Linha
   {
      public:
          Linha(String* array[])
          {ParseArray(array);}
         
          Linha(String* letra, String* ip, String* mac, String* nome)
          {
              Letra = letra;
              IP = ip;
              MAC = mac;
              Nome = nome;
              Xrray = new String*[4];
              Xrray[0] = letra;
              Xrray[1] = mac;
              Xrray[2] = ip;
              Xrray[3] = nome;
           }

           Linha(String* linha)
           {
               String* separador = ";";
               Xrray = linha->Split(separador->ToCharArray());
               ParseArray(Xrray);
            }

            String* Xrray[];
            String* Letra;
            String* IP;
            String* MAC;
            String* Nome;

            String* ToString()
            {return String::Concat(Letra,";",MAC,String::Concat(";",IP,";",Nome));}

      private:
          void ParseArray(String* array[])
          {
              Letra = array[0];
              IP = array[2];
              MAC = array[1];
              Nome = array[3];
          }
     };
}

É uma classe bem simples e poderia ser melhorada em muitos pontos, mas a idéia aqui era fazer um pequeno Parse na linha e dividir em membros.
Uma dica, vejam o meu método ToString(), nele eu determino o que será o resultado da classe quando alguma outra classe se utilizar desse recurso, no caso seria o ListBox que recebe um objeto em sua coleção e exibe na tela o .ToString() desse objeto, caso eu não houvesse implementado apareceria no ListBox o padrão Namespace.NomeDaClasse, essa é uma dica interessante, para sempre utilizarmos no framework!!!😉

Woow! A princípio pensei que seria bem mais tranquilo fazer essa experiência, mas como vocês estão vendo é muito detalhe importante nesse meio e ainda tem mais, mas vou fazer um próximo capítulo para não ficar cansativo, você vão ver o resultado final e ainda tem algumas outras dicas que espero ajudar quem estiver se aventurando como eu!!

ufa escrevi bastante!!! O que estão achando pessoal?
Grande abraço!
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s