problema con HERENCIA

21/05/2007 - 20:56 por Daniel Maldonado | Informe spam
Estimados. estoy estudiando C#.net y estoy comenzando mi larga y tediosa
curva de aprendizaje. Si bien no será tan dificil dado que vengo desde C++
con POO. pero estuve haciendo esta prueba de herencia y el compilador me
tira el siguiente error. Pongo el código para que vean la simplicidad del
ejemplo.

Defino una clase MAMIFEROS y luego una clase HUMANOS como herencia de
MAMIFEROS y vean el problema principalmente con el constructor de la clase
HUMANOS.

Me dice: " Ninguna sobrecarga para el método MAMIFEROS acepta "0" argumentos
".

Cual sera el error conceptual que estoy cometiendo ???.


class Mamiferos

{

public string strNombreDeEspecie;

public int intTipoDeEspecie;

public Mamiferos(string n, int t)

{

this.strNombreDeEspecie = n;

this.intTipoDeEspecie = t;

}

}



****************************************************************************
********************

****************************************************************************
********************

class Humanos : Mamiferos

{

public string strRazaDeHumano;

public int intCantidadHumanos;

public Humanos (string r, int c)

{

this.strNombreDeEspecie = r;

this.intCantidadHumanos = c;

}

}

Preguntas similare

Leer las respuestas

#1 RFOG
21/05/2007 - 20:57 | Informe spam
Es una de las cosas del .NET. Como dices venir de C++ te comento las
diferencias.

En .NET una clase define un constructor por defecto... si no hay ningún
constructor definido. Si implementas cualquier tipo de constructor y
utlizas la herencia debes especificar un constructor por defecto.

Y otra: desde un constructor no se puede llamar a otro de la misma clase,
es decir, siendo todo constructores no puedes

ctor()
{
ctor(0.0);
}

ctor(int a, int b)
{
}

Debes utilizar una función intermedia.


En Mon, 21 May 2007 20:56:27 +0200, Daniel Maldonado
escribió:

Estimados. estoy estudiando C#.net y estoy comenzando mi larga y tediosa
curva de aprendizaje. Si bien no será tan dificil dado que vengo desde
C++
con POO. pero estuve haciendo esta prueba de herencia y el compilador me
tira el siguiente error. Pongo el código para que vean la simplicidad del
ejemplo.

Defino una clase MAMIFEROS y luego una clase HUMANOS como herencia de
MAMIFEROS y vean el problema principalmente con el constructor de la
clase
HUMANOS.

Me dice: " Ninguna sobrecarga para el método MAMIFEROS acepta "0"
argumentos
".

Cual sera el error conceptual que estoy cometiendo ???.


class Mamiferos

{

public string strNombreDeEspecie;

public int intTipoDeEspecie;

public Mamiferos(string n, int t)

{

this.strNombreDeEspecie = n;

this.intTipoDeEspecie = t;

}

}



****************************************************************************
********************

****************************************************************************
********************

class Humanos : Mamiferos

{

public string strRazaDeHumano;

public int intCantidadHumanos;

public Humanos (string r, int c)

{

this.strNombreDeEspecie = r;

this.intCantidadHumanos = c;

}

}











Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
El que dé rosas de comer al burro, cobrará con un rebuzno.
Respuesta Responder a este mensaje
#2 Octavio Hernandez
21/05/2007 - 21:28 | Informe spam
Hola,

En este caso el problema simplemente es que no estás indicando explícitamte
en el constructor de Humanos la llamada al constructor de su clase base. Por
lo tanto, el compilador intenta insertar una llamada a un constructor sin
argumentos
de Mamiferos, que no existe.

La solución es cambiar el constructor de Humanos por algo así:

public Humanos (string r, int c) : base(r, 0) // aqui se llama
al const. de Mamiferos

{

this.intCantidadHumanos = c;

}

Ojo que tu clase viola algunos principios básicos de la POO (válidos tanto
en C# como C++),
como el encapsulamiento de los campos.

Slds - Octavio


"Daniel Maldonado" escribió en el
mensaje news:%
Estimados. estoy estudiando C#.net y estoy comenzando mi larga y tediosa
curva de aprendizaje. Si bien no será tan dificil dado que vengo desde C++
con POO. pero estuve haciendo esta prueba de herencia y el compilador me
tira el siguiente error. Pongo el código para que vean la simplicidad del
ejemplo.

Defino una clase MAMIFEROS y luego una clase HUMANOS como herencia de
MAMIFEROS y vean el problema principalmente con el constructor de la clase
HUMANOS.

Me dice: " Ninguna sobrecarga para el método MAMIFEROS acepta "0"
argumentos
".

Cual sera el error conceptual que estoy cometiendo ???.


class Mamiferos

{

public string strNombreDeEspecie;

public int intTipoDeEspecie;

public Mamiferos(string n, int t)

{

this.strNombreDeEspecie = n;

this.intTipoDeEspecie = t;

}

}



****************************************************************************
********************

****************************************************************************
********************

class Humanos : Mamiferos

{

public string strRazaDeHumano;

public int intCantidadHumanos;

public Humanos (string r, int c)

{

this.strNombreDeEspecie = r;

this.intCantidadHumanos = c;

}

}






Respuesta Responder a este mensaje
#3 RFOG
21/05/2007 - 21:40 | Informe spam
Hola, O,

¿No tiene que ver con lo que he comentado? En C++/CLI es así (acabo de
leerlo).

En Mon, 21 May 2007 21:28:49 +0200, Octavio Hernandez
escribió:

Hola,

En este caso el problema simplemente es que no estás indicando
explícitamte
en el constructor de Humanos la llamada al constructor de su clase base.
Por
lo tanto, el compilador intenta insertar una llamada a un constructor sin
argumentos
de Mamiferos, que no existe.

La solución es cambiar el constructor de Humanos por algo así:

public Humanos (string r, int c) : base(r, 0) // aqui se
llama
al const. de Mamiferos

{

this.intCantidadHumanos = c;

}

Ojo que tu clase viola algunos principios básicos de la POO (válidos
tanto
en C# como C++),
como el encapsulamiento de los campos.

Slds - Octavio


"Daniel Maldonado" escribió en el
mensaje news:%
Estimados. estoy estudiando C#.net y estoy comenzando mi larga y tediosa
curva de aprendizaje. Si bien no será tan dificil dado que vengo desde
C++
con POO. pero estuve haciendo esta prueba de herencia y el compilador me
tira el siguiente error. Pongo el código para que vean la simplicidad
del
ejemplo.

Defino una clase MAMIFEROS y luego una clase HUMANOS como herencia de
MAMIFEROS y vean el problema principalmente con el constructor de la
clase
HUMANOS.

Me dice: " Ninguna sobrecarga para el método MAMIFEROS acepta "0"
argumentos
".

Cual sera el error conceptual que estoy cometiendo ???.


class Mamiferos

{

public string strNombreDeEspecie;

public int intTipoDeEspecie;

public Mamiferos(string n, int t)

{

this.strNombreDeEspecie = n;

this.intTipoDeEspecie = t;

}

}



****************************************************************************
********************

****************************************************************************
********************

class Humanos : Mamiferos

{

public string strRazaDeHumano;

public int intCantidadHumanos;

public Humanos (string r, int c)

{

this.strNombreDeEspecie = r;

this.intCantidadHumanos = c;

}

}















Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
El que dé rosas de comer al burro, cobrará con un rebuzno.
Respuesta Responder a este mensaje
#4 Octavio Hernandez
21/05/2007 - 21:52 | Informe spam
Hola Rafa,

Para usar la herencia en C# no hace falta q la clase base tenga un
constructor por defecto; lo que pasa es que si no lo tiene, las clases
herederas deberán llamar explícitamente a uno de los que existan. Si
tienes:

public class Persona
{
// único constructor
public Persona(string nombre)
{
// hacer algo con 'nombre'
}

Entonces:

public class Empleado
{
// hay q llamar explícitamente al de Persona mediante base()
public Empleado(string nombre, string empresa) : base(nombre)
{
// hacer algo con 'empresa'
}

Por otra parte, un constructor sí puede llamar a otro de la misma clase:

// otro constructor de Empleado
// llama al anterior mediante this()
public Empleado(string nombre) : this(nombre, null)
{
}

Slds - Octavio
Respuesta Responder a este mensaje
#5 RFOG
21/05/2007 - 22:14 | Informe spam
Okis, entonces es lo mismo pero visto de diferente forma...

En Mon, 21 May 2007 21:52:26 +0200, Octavio Hernandez
escribió:

Hola Rafa,

Para usar la herencia en C# no hace falta q la clase base tenga un
constructor por defecto; lo que pasa es que si no lo tiene, las clases
herederas deberán llamar explícitamente a uno de los que existan. Si
tienes:

public class Persona
{
// único constructor
public Persona(string nombre)
{
// hacer algo con 'nombre'
}

Entonces:

public class Empleado
{
// hay q llamar explícitamente al de Persona mediante base()
public Empleado(string nombre, string empresa) : base(nombre)
{
// hacer algo con 'empresa'
}

Por otra parte, un constructor sí puede llamar a otro de la misma clase:

// otro constructor de Empleado
// llama al anterior mediante this()
public Empleado(string nombre) : this(nombre, null)
{
}

Slds - Octavio







Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
El que dé rosas de comer al burro, cobrará con un rebuzno.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida