@PaperBirdMaster No entiendo la pregunta. ¿ El problema es como accedes a los miembros de las distintas clases base ? Pues los cualificas por completo, o utilizas using.
@Pikoh Correcto, eso es lo que quería oír :) que no tenga un problema no significa que no pueda tener otros o que carezca de un problema no significa que sea mejor (o peor)
@Trauma No, el diamante de la muerte no se soluciona con usings.
class A { public: void eat(){ cout<<"A";} };
class B: virtual public A { public: void eat(){ cout<<"B";} };
class C: virtual public A { public: void eat(){ cout<<"C";} };
class D: public B,C { public: void eat(){ cout<<"D";} };
int main(){
A *a = new D();...
@Pikoh El problema de las interfaces, a mi entender, es que no permiten implementación alguna... lo cuál deriva en repetición de código que podría ser evitable.
@PaperBirdMaster bueno, el tema da para mucho y ha sido ampliamente discutido. De todas maneras,si sabes lo que haces no hay problema que valga,con herencia simple o multiple
@Pikoh La primera vez que usé herencia múltiple fue en el diseño de un menú genérico para máquinas tragaperras... una de las clases era "Nodo" que se usaba para construir el árbol del menú; habían nodos que controlaban un valor (por ejemplo volumen general) un flag, un valor entre varios (desplegable) o que realizaban una acción (restablecer valores, resetear la máquina)...
Así que tenía la clase "Nodo" la clase "Valor" (que se sub-dividía en "Rango", "Bandera", "Opción") y la clase "Acción". Si una opción de menú era de tipo valor heredaba de Nodo y Valor, si hacía una acción heredaba de Nodo y Acción... algunas hacían una acción si el valor obtenía un valor determinado y heredaban de "Nodo", "Valor" y "Acción".
@PaperBirdMaster yo lo he usado poco o nada, solo a nivel teórico. Los lenguajes en los que he trabajado, o no soportaban herencia o solo soportaban herencia simple.
@PaperBirdMaster yo no me encontrado con ningun caso en el que los interfaces no me hayan resuelto la papeleta. Al final, siempre hay soluciones, mas o menos optimas.
La primera cuestión es saber a qué nos referimos con "parsear HTML".
La interpretación estricta es procesar el documento, comprobar que es un HTML correcto, trabajar con la totalidad del documento, etc. En ese sentido, las expresiones regulares son completamente insuficientes.
El ejemplo clásic...
Oye, @PaperBirdMaster. En la herencia múltiple, se copian todos los atributos de las clases base. ¿ En la herencia virtual también ? ¿ Solo se ven afectadas las funciones ?
Y, ya puestos, si la respuesta es positiva y se copian todos los atributos, ¿ en que orden ? ¿ En el indicado al hacer la declaración en la clase derivada ?
@Trauma La herencia virtual no afecta a las variables miembro si no a la manera en que el compilador escoge qué función (de qué clase) escoger.
@Trauma El "memory layout" es el mismo que el orden de herencia: class A{int a;}; class B{int b;}; class C{int c;}; class D : A, B, C {}; la clase D tendrá a, b y c en ese orden (de hecho es el truco usado para las tuplas).ç
@PaperBirdMaster Ok. La herencia virtual no interfiere influye en la disposición en memória de los datos miembro. ergo solo soluciona (relativamente) un problema concreto. Y no es propiamente una solución; es mas bien un ahorro de tiempo y código ...
¿ Hay alguna forma de eliminar múltiples copias en memoria de una misma clase base, al utilizar herencia múltiple ?
En el diagrama de la wikipedia que pusiste antes sobre el triángulo de la muerte, ¿ la clase D incluye 2 copias distintas de los miembros de la clase A ?
Yo te iba a decir que no (es lo que me viene a la cabeza sin tener ninguna seguridad de ello) pero me pongo a pensarlo y me empieza a salir humo de la cabeza... debería contener las 2 copias o al menos una copia por cada método distinto, si 2 métodos son iguales tanto en B como en C sólo debería guardar una copia de dicho método pero si los 2 métodos son distintos... seguro que me estoy colando pero diría que necesita los 2 códigos...
@PabloSimonDiEstefano Pero me refiero a los datos miembro, no a los metodos. La lógica indica que si, que debería de incluir 2 copias de la clase base. Cuanto mas lo pienso, mas me parece que he preguntado una tontería. Que no puede ser de otra forma :-/
@Trauma Entonces si hay 2 atributos iguales en las 2 clases B y C (que no debería porque para eso lo pones en A pero siempre puede pasar), cual cogería, los 2? pero eso no puede ser...
En los comentarios, ¿cómo puedo evitar tener que poner [meta](http://meta.es.stackoverflow.com/) para poner un enlace el sitio Meta? ¿Se pueden usar magic-links en este sitio?
¿Qué son los magic-links? ¿Cómo funcionan? ¿Cuáles hay?
Regresar al índice del FAQ
@PabloSimonDiEstefano Depende del método desde el que los uses. Si lo usas de un método de A, cogería la copia de la clase A, y se es de B, pues de la copia de la clase B.
@lois6b Pues me haces el favor del siglo porque estoy conectado toda la mañana y muchas veces veo preguntas que hay que ponerles cosas del tipo como preguntar y tal y no sabía como
estoy buscando enviar unos datos por post en android a un PHP en un servidor externo y no encuentro ninguna clase o librería que me ayude, alguna sugerencia y ejemplos? Gracias
@Trauma La herencia no soluciona un problema concreto, es una herramienta, con las herramientas adecuadas puedes solucionar los problemas adecuados. ¿Cuál era la duda? xD
Si A tiene un miembro público int cucu, B y C también lo tienen. ¿ Desde la clase final D, si hago referencia a dicho miembro, que pasa ? supongo que error del compilador, y tendríamos que cualificarlo, ¿ no ?
@Trauma Si no es virtual D está compuesta de dos A::a que ha heredado de cada padre. Si es virtual D está compuesta de un A::a que ha heredado de su abuelo.
@PaperBirdMaster Joder, son vacías en el esquema que estamos usando. Pero no tiene porqué estarlo, ¿ no ?
@PaperBirdMaster es que no encuentro solución. O terminamos con 2 copias de la clase A en memória, o con 2 copias de los métodos de las clases herederas de A.
Fíjate que ya no hablo de encontrar los métodos. Eso ha quedado resuelto.
@CarlosA.Gómez Si lo se. Me acabo de transformar en un compilador, pero necesito que tú me ayudes a compilar, yo soy el compilador, yo se que la arquitectura es de 16 bits por byte, así que te pregunto por quinta vez: ¿En qué cambia el comportamiento del código de mi pregunta/respuesta asumiendo un tamaño de byte de 16 bits?
@PaperBirdMaster Deberías de explicarle que, obviamente, la misión del compilador es tomar tamaños de palabra arbitrarios para empeorar el rendimiento del código. Es obvio.
@Trauma Es que estás liándote, los métodos no tienen direcciones, los métodos están o no están (vale si, tienen el vtable, pero es para encontrar el método, no para direccionarlo).
ahí hay 2 jerarquias, con las mismas clases base virtuales.
Sin embargo, desde los métodos de la clase C, podemos recibir un this que apunte a la clase C, a la clase D, o a la clase F
A, vale, ya lo entiendo.
Ah, pues no. Que sigo sin entenderlo.
@PaperBirdMaster ummm ... veo que delante de los datos de clases virtuales, va el puntero a la VTABLE. ¿ se podría basar en ella ?
Creía que la VTABLE era solo para los métodos, no que fuera relevante para el acceso a los datos miembro ...
@PaperBirdMaster ya se que soy muy pesado, pero es que el tema mola.
Vale. Comprobado. Las distintas jerarquías tienen distinto puntero a VTABLE. De algún modo, es relevante para el acceso a los datos miembro de clases padre.
Bueno, fin del misterio. Con herencia virtual, no hay duplicidad. Ni de datos, ni de código.
Buenas . Estoy buscando algún modulo para el reconocimiento de voz en python. Ya me he documentado en algunos por alli , sin embargo quize pasar por la comunidad de SO para ver que recomendaciones me hacían. Quizás que ya hayan utilizando anteriormente y que les dio buenos resultado. Si bien se p...
Hola a todos! Tengo una duda existencial, si alguien me orienta, donde esta la raiz (fuente, origen) del internet?, se puede desconectar y quitarles a todos internet?
@Victor-Random Como ya sabrás no puedes desconectar Internet por el mismo motivo por el que una red de pescador sigue funcionando aunque cortes una cuerdecilla de la red.
Pero sí que es posible causar grandes daños a internet atacando puntos estratégicos como los 6 grandes backbone tier 1: Level 3 Communications, Telia Carrier, NTT, Cogent, GTT, y Tata Communications.
@JoseAntonioDuraOlmos si tumban esos seria perjudicial?, pero en el caso de los servidores en paises donde consiguen internet de ellos, lo siguen teniendo=
@Victor-Random Si tumban esos 6 una enorme cantidad de gente se encontraría con que una enorme parte de la red no les es accesible o el acceso les resulta MUY lento.
Pero sí, incluso así Internet seguiría funcionando.
Conexiones que no están preparadas para manejar todo el flujo de datos que antes pasaba por los 6 grandes backbones y que ahora tienen que pasar por ellos.
@Victor-Random Los 6 grandes Backbones son como los ISP de los ISP. Los ISP te venden la conexión a ti. Y los grandes Backbones le venden la conexión a los ISP. Pero también hay ISP que hacen sus propias conexiones en vez de comprar las de otros.
@Victor-Random Internet es una red para comunicar ordenadores. Mientras haya cables entre dos ordenadores estos se pueden comunicar. En efecto, ellos son Internet.
@Theia En la mayor facilidad que tenemos los humanos para manejar palabras que números. Los DNS son completamente opcionales, se puede hacer funcionar todo Internet sin DNS.
Un DNS no es más que un libro de nombres alternativos. Si servidor de páginas web tiene la dirección 10.10.10.120 puedo registrarlo en un DNS como www.miservidor.es . Y quien teclee esa dirección en palabras se conecta al servidor DNS y el servidor DNS le da la dirección IP, despues el navegador internamente usa la IP.
¿Te has fijado alguna vez en que al configurar el DNS tienes que poner la dirección IP del servidor DNS?
@Theia La gracia del asunto es que no puedes usar una dirección con palabras como www.midns.com para configurar el DNS. Porque el ordenador solo puede usar direcciones IP y si no tiene una IP para acceder al servidor DNS y consultar qué IP le corresponde a la direccion de palabras entonces no va a poder comunicarse.
Otro desarrollador subió sus cambios al repositorio remoto y cuando quiero hacer push me sale el siguiente error:
error: failed to push some refs to 'xxx@yyy'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another reposi...
estimad@s acabo de escribir este mamotreto de pregurespuesta... me parece que agrega, aunque todo tipo de recomendaciones son bienvenidas
en particular, me pasa que me cuesta mucho que se me ocurran cosas para contribuir, así que si a alguien le parece que este tipo de contribuciones no aporta mucho, me lo dice sin problemas :)
@gbianchi jajaja realmente, git es genial... ahora en agosto vamos a hacer un webcast de data science y estoy trabajando en tener un repositorio centralizado en github donde todos podamos hacer data science con los datos de SOes
capaz que está bueno charlar un poco de git también
@gbianchi decís porque es complicado hacer cambios de infraestructura? o porque tu trabajo tiene algo particular para lo que usar svn es mejor que usar git?