Sim, está é a famosa palavra que traduzida para a língua inglesa da nome ao famoso filme Matrix onde as maquinas tomam conta do planeta terra escravizando a raça humana e a usando como fonte de energia. Mas ficção cientifica a parte, fica a pergunta, o que é matriz?
Sinônimos de útero e mãe, na ciência da computação as matrizes são estruturas matemáticas organizadas na forma de tabela com linhas e colunas, utilizadas na organização de dados e informações. Nos assuntos ligados à álgebra, as matrizes são responsáveis pela solução de sistemas lineares.
Em C++ para utilizar matrizes dentro de classes é necessário alguns detalhes extras, o compilador Microsoft não permite inicializar arrays ou matrizes em uma classe fora do construtor, também possui regras sobre a ordem da declaração da matriz dentro da classe e requer a adição do parâmetro /c na hora da compilação. Para saber mais sobre o assunto use o link abaixo:
Compiler Error C2536: http://msdn.microsoft.com/en-us/library/9f53ks1w.aspx
Como C++ é uma linguagem hibrida e de paradigmas não é necessário utilizar objetos de classe e um código menor consegue obter um programa com o mesmo resultado que em Java e C#.
Exemplos:
Neste exemplo criaremos uma classe que contém uma matriz com as cartas do baralho. Em C++ teremos dois exemplos diferentes, o primeiro sem objetos de classe e o segundo com objetos de classe, mas não utilizando os requisitos da Microsoft.
Java
Classe #1 – Jogo
public class Jogo
{
public static void main(String[] args)
{
Cartas jogador1 = new Cartas();
// Cartas Disponiveis
System.out.println("Naipes da Matriz");
for (int naipes = 0; naipes <= jogador1.tNaipe()-1; naipes++ )
{
jogador1.jogaCartas(0, naipes);
}
System.out.println();
System.out.println();
System.out.println("Componentes da Matriz");
for (int componentes = 0; componentes <= jogador1.tComponentes()-1; componentes++ )
{
jogador1.jogaCartas(1, componentes);
}
}
}
Classe #2 -Cartas
public class Cartas
{
private int naipe;
private int componetes;
private String cartas[][] =
{
{ "Paus", "Ouros", "Copas", "Espadas", },
{ "Curinga", "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" }
};
Cartas ()
{ }
Cartas (int naipe, int componentes)
{
this.naipe = naipe;
this.componetes = componentes;
}
public void jogaCartas(int naipe, int componentes)
{
System.out.print(cartas[naipe][componentes] + ", ");
}
public int tNaipe()
{
return this.cartas[0].length;
}
public int tComponentes ()
{
return this.cartas[1].length;
}
}
C#
Classe #1 – Jogo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
{
class Program
{
static void Main(string[] args)
{
Cartas jogador1 = new Cartas();
// Cartas Disponiveis
Console.WriteLine("Naipes da Matriz");
for (int naipes = 0; naipes <= jogador1.tNaipe()-1; naipes++ )
{
jogador1.jogaCartas(0, naipes);
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Componentes da Matriz");
for (int componentes = 0; componentes <= jogador1.tComponentes()-1; componentes++ )
{
jogador1.jogaCartas(1, componentes);
}
Console.ReadKey();
}
}
}
Classe #2 -Cartas
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
{
public class Cartas
{
private int naipe;
private int componetes;
private string[][] cartas =
{
new string[]
{ "Paus", "Ouros", "Copas", "Espadas", },
new string[]
{ "Curinga", "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" }
};
public Cartas ()
{ }
public Cartas (int naipe, int componentes)
{
this.naipe = naipe;
this.componetes = componentes;
}
public void jogaCartas(int naipe, int componentes)
{
Console.Write(cartas[naipe][componentes] + ", ");
}
public int tNaipe()
{
return this.cartas[0].Length;
}
public int tComponentes ()
{
return this.cartas[1].Length;
}
}
}
C++
Arquivo #1:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
const int tnaipe = 4;
const int tcompo = 14;
const string cartas[tnaipe][tcompo] =
{
{ "Paus", "Ouros", "Copas", "Espadas", },
{ "Curinga", "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" }
};
void jogaCartas(int naipe, int componentes)
{
cout << cartas[naipe][componentes] << ", ";
}
int _tmain(int argc, _TCHAR* argv[])
{
// Cartas Disponíveis
cout << "Naipes da Matriz" << endl;
for (int naipes = 0; naipes <= tnaipe - 1; naipes++)
{
jogaCartas(0, naipes);
}
cout << endl; cout << endl;
cout << "Componentes da Matriz" << endl;
for (int componentes = 0; componentes <= tcompo - 1; componentes++)
{
jogaCartas(1, componentes);
}
cout << endl; system("pause");
return 0;
}
C++ – exemplo 2
Arquivo #1 – Jogo
#include "stdafx.h"
#include <iostream>
#include <string>
#include "cartas.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Cartas jogador1;
cout << "Naipes da Matriz" << endl;
for (int naipes = 0; naipes <= jogador1.tNaipe() - 1; naipes++)
{
jogador1.jogaCartas(0, naipes);
}
cout << endl; cout << endl;
cout << "Componentes da Matriz" << endl;
for (int componentes = 0; componentes <= jogador1.tComponentes() - 1; componentes++)
{
jogador1.jogaCartas(1, componentes);
}
cout << endl;
system("pause");
return 0;
}
Arquivo #2 – Classe Cartas (.h)
#include "stdafx.h"
#include <iostream>
#include <string>
#include "da_matriz.h"
using namespace std;
class Cartas
{
public:
void jogaCartas(int naipe, int componentes)
{
cout << cartas[naipe][componentes] << ", " ;
}
int tNaipe()
{
return tnaipe;
}
int tComponentes()
{
return tcompo ;
}
};
Arquivo #3 – da matriz (.h)
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
const int tnaipe = 4;
const int tcompo = 14;
const string cartas[tnaipe][tcompo] =
{
{ "Paus", "Ouros", "Copas", "Espadas", },
{ "Curinga", "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" }
};