Estudando mais profundamente a linguagem de programação C++ acabei chegando a conclusão que ela possui tantos recursos excelentes para facilitar a programação, que no fim acabam atrapalhando, muito se discute que C++ é mais eficiente que a lingaugem de programação JAVA que é multiplataforma, mas estudando bem a estrutura de sistemas e o fato de ser multiplataforma acabei chegando a conclusão que se desejo fazer algo realmente eficiente o farei em c estruturando e usando muito os ponteiros, os recursos adicionais podem ser implementados de outra maneira na linguagem c, através de ponteiros para funções, diretivas de programação e uso de macrofunções. A diferença é que se bem implementado em c, fica muito mais eficiente, sem mencionar o aspecto na previsibilidade que o coloca ainda como uma das linguagens preferidas para o desenvolvimento de sistemas operacionais, como por exemplo o unix, linux, bsd's e por ai vai ...!
Um dos aspectos que mosto que é possível fazer com a linguagem c estruturada, é o uso de gabaritos de funções
Logo abaixo menciono como fazer um gabarito de funções utilizando-se de macrofunções.
No exemplo que colocarei logo mais, a função retornará o maior valor entre três números passados para a função
Utilizando macrofunções basta colocar a mesma condição de maioridade e retornar o maior valor, fiz isso aos pares, devido a definição de comparação se dar aos pares e para ficar mais claro.
Abaixo mostro o código com as linhas:
#define MAIOR2(x, y) ( (y>x)? (y): (x))
#define MAIOR3(x, y, z) ( (MAIOR2(x, y)>MAIOR2(x, z))? (MAIOR2(x, y)): (MAIOR2(x, z)))
Realizando a mesma tarefa que o gabarito de função:
template< class T>
T maximo1( T x, T y, T z)
{
T max = x;
if( y > max )
max = y;
if( z > max )
max = z;
return max;
}
Claro que o fato de possuir sintaxe específica, torna o código em c++ mais legível, entretanto se o motivo de se desenvolver em c++ for a eficiência é bom pensar em desenvolver em c, pois é mais eficiente e previsível
Fiz o código para testar a veracidade que é possível fazer gabaritos de função com macrofunções em três arquivos: são eles respectivamente:
- maximo.cpp
- novomain1.cpp
- maximo.h
Abaixo o código inteiro que fiz para testar:
//Este exemplo apresenta o uso de gabaritos de função em C++. //Autor: Danilo Matias //E-mail: danilomatias19@gmail.com
template< class T>
T maximo1( T x, T y, T z) { T max = x;
if( y > max ) max = y;
if( z > max ) max = z;
return max; }
#line 48 /* * File: novomain1.cpp * Author: danilomatias192gmail.com * * Created on 15 de Janeiro de 2009, 16:00 */
#include <stdlib.h> #include "maximo.cpp" #include "maximo.h" #include <c++/4.1.2/iostream>
#include <c++/4.1.2/cstdlib>
/* * */
using std :: cout;
using std :: cin; using std :: endl;
void a1(); void a2(); int main(int argc, char** argv) {
a1(); a2(); return (EXIT_SUCCESS); } void a2() {
int a=5,b=3,c=8; float x=5.002,y=3.005,z=5.0001;
char s1,s2,s3; cout <<"Os tres numeros inteiros sao "<< a <<" " << b <<" " << c ;
cout <<"\nO maior numero inteiro eh: " <<MAIOR3(a, b, c)<<endl;
//cout <<"\n\nEntre com 3 numeros reais: "; //cin >>x >>y >>z; cout <<"Os tres numeros reais sao "<< x <<" " << y <<" " << z<<endl;
cout <<"\nO maior numero float eh: " <<MAIOR3(x, y, z); cout <<"\n\nEntre com 3 caracteres: ";
cin >>s1 >>s2 >>s3; cout <<"\nO maior caracter eh: " <<MAIOR3(s1, s2, s3) <<endl;
}
void a1() { int a=5,b=3,c=8;
float x=5.002,y=3.005,z=5.0001; char s1,s2,s3;
cout <<"Os tres numeros inteiros sao "<< a <<" " << b <<" " << c ;
cout <<"\nO maior numero inteiro eh: " <<maximo1(a,b,c)<<endl; //cout <<"\n\nEntre com 3 numeros reais: "; //cin >>x >>y >>z;
cout <<"Os tres numeros reais sao "<< x <<" " << y <<" " << z<<endl;
cout <<"\nO maior numero float eh: " <<maximo1(x,y,z); cout <<"\n\nEntre com 3 caracteres: ";
cin >>s1 >>s2 >>s3; cout <<"\nO maior caracter eh: " <<maximo1(s1,s2,s3) <<endl;
//main1trrx(); }
#line 20 /* * File: maximo.h * Author: danilomatias * * Created on 15 de Janeiro de 2009, 16:47 */
#ifndef _MAXIMO_H #define _MAXIMO_H
#ifdef __cplusplus extern "C" {/* apenas para indicar explicitamente ao compilador que a linguagem a ser compilada é a c e não a c++*/
#endif
#define MAIOR2(x, y) ( (y>x)? (y): (x)) #define MAIOR3(x, y, z) ( (MAIOR2(x, y)>MAIOR2(x, z))? (MAIOR2(x, y)): (MAIOR2(x, z)))
#ifdef __cplusplus } #endif
#endif /* _MAXIMO_H */
|
Bem Espero que ajude ...!
Lembre-se pra fazer o gabarito de função pensa-se na operação coloca ela lá e o q ela deve retornar ...!
Até a próxima!
Nenhum comentário:
Postar um comentário