SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: DanielC# en Lunes 29 de Julio de 2013, 19:47

Título: Sobrecarga de operadores en C#
Publicado por: DanielC# en Lunes 29 de Julio de 2013, 19:47
Hola a todos.
Alguien me puede dar una mano con esto, llevo días leyendo sobre el tema y bajando ejemplos y no logro entender esto de la sobrecarga de operadores, por Ej. ¿es muy distinto hacer lo mismo con un bucle foreach para sumar 2 vectores y poner el resultado en otro?.-

Fuente:
http://www.csharpya.com.ar/detalleconcepto.php?codigo=197&inicio=60 (http://www.csharpya.com.ar/detalleconcepto.php?codigo=197&inicio=60)

Código: [Seleccionar]
using System;

namespace SobrecargaOperadores3
{
    class VectorEnteros
    {
        private int[] vec;

        public VectorEnteros()
        {
            vec = new int[5];
        }

        public void Cargar()
        {
            for (int f = 0; f < vec.Length; f++)
            {
                Console.Write("Ingrese componente:");
                vec[f] = int.Parse(Console.ReadLine());
            }
        }

        public void Imprimir()
        {
            for (int f = 0; f < vec.Length; f++)
            {
                Console.Write(vec[f] + " ");
            }
            Console.WriteLine();
        }

        public static VectorEnteros operator ++(VectorEnteros v)
        {
            VectorEnteros resu = new VectorEnteros();
            for (int f = 0; f < v.vec.Length; f++)
            {
                resu.vec[f] = v.vec[f] + 1;
            }
            return resu;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            VectorEnteros v1 = new VectorEnteros();
            Console.WriteLine("Carga del vector");
            v1.Cargar();
            Console.WriteLine("Impresión del vector");
            v1.Imprimir();
            v1++;
            Console.WriteLine("Impresión del vector luego del operador ++");
            v1.Imprimir();
            Console.ReadKey();
        }
    }
}

Bueno estoy mareado, Uds. me dirán.-
Saludos y un abrazo.-
Daniel
Título: Re:Sobrecarga de operadores en C#
Publicado por: ProfesorX en Martes 30 de Julio de 2013, 19:35
Bueno, para empezar, dejame comentarte algo, en programacion no existe una "unica" solucion correcta (eso es lo bonito de la programacion), todo problema puede tener infinidad de soluciones, todas correctas, todo dependera al final de factores como el lenguaje de programacion que utilizas, el conocimiento y experiencia del programador, y de los recursos con que cuentes para resolver el problema.

Asi que contestando tu pregunta:

Citar
¿es muy distinto hacer lo mismo con un bucle foreach para sumar 2 vectores y poner el resultado en otro?

Al final seria lo mismo, solo que resuelto de una manera diferente, pero eso no quiere decir que este equivocado.

Entonces, la sobrecarga de operadores es simplemente una herramienta mas a nuestra disposicion para resolver un problema.

Te pongo un ejemplo, supon que necesito calcular la operacion de multiplicar un vector por un escalar, como piensas que seria mas entendible para hacerlo, desarrollar una funcion que te multiplique un vector por un escalar asi:

MultiplicaVectorEscalar(Vector, 5);

o realizar una sobrecarga del operador * para realizar la multiplicacion de esta manera:

Vector * 5;

Otro ejemplo, queremos realizar una clase para el manejo de los numeros complejos, y a su vez queremos realizar todas las operaciones basicas (suma, resta, multiplicacion, division) con numeros complejos de la misma manera que lo hacemos con los numeros reales. podemos definir todo mediante funciones/metodos:

Suma(Complejo1, Complejo2), Resta(Complejo1, Complejo1) Multiplica(Complejo1, Complejo2), Divide(Complejo1, Complejo2).

o podemos sobrecargar los operadores y el codigo queda mas "elegante"

Complejo1 + Complejo2, Complejo1 - Complejo2, Complejo * Complejo2, Complejo1 / Complejo2.

Como nota personal, yo no uso mucho la sobrecarga de operadores, pero se como se hace, asi por ejemplo si me encuentro un programa que la utiliza, se lo que esta haciendo y como se utiliza, que al final es lo que importa.

Saludos :)
Título: Re:Sobrecarga de operadores en C#
Publicado por: DanielC# en Miércoles 31 de Julio de 2013, 18:45
Hola Profe.
Citar
Como nota personal, yo no uso mucho la sobrecarga de operadores, pero se como se hace, asi por ejemplo si me encuentro un programa que la utiliza, se lo que esta haciendo y como se utiliza, que al final es lo que importa.
Muy bueno no queda nada más por decir,debo aprenderlo.-
En cuanto a sintaxis no logro implementarla todavia, por lo tanto voy a hacer lo de siempre lo dejare pendiente y seguramente en algún momento se me iluminará la idea.- 

Saludos y un abrazo.-
Daniel