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" } };