 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
koes Lt


Registrado: 19 Jul 2003Mensajes: 77Ubicación: A Laracha (A Coruña)
|
Publicado: Mie 26 Nov, 2003 12:03 am Asunto: Clases abstractas, Enable y Maximizar |
|
|
Tengo una clase abstracta (le defino un metodo virtual) y en el constructor de una subclase quiero llamar al constructor de la clase abstracta(su superclase). No se si esto es posible, porque me da errores de que no puede instanciar una clase abstracta y de que no encuentra el constructor por defecto.
A lo mejor tambien lo hago mal, la llamada al constructor de la clase abstracta lo he hecho de la siguiente forma: | Código: | Encode::Encode(file); |
Si alguien me lo puede aclarar se lo agradeceria.
Otra pregunta, alguien sabe alguna forma de cuando tienes un GroupBox, por ejemplo, y el GroupBox tiene Enable a false o true que los elementos internos del GroupBox tambien tengan el mismo valor para el Enable.
Por ultimo, como puedo hacer para que cuando una ventana de mi aplicacion se maximize que los elementos que contiene ocupen la totalidad de la ventana, es que ahora mismo mantienen el mismo tamaño dejando un gran espacio vacio.
Muchas Gracias. |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mie 26 Nov, 2003 12:56 am Asunto: |
|
|
| Cita: |
Tengo una clase abstracta (le defino un metodo virtual) y en el constructor de una subclase quiero llamar al constructor de la clase abstracta(su superclase). No se si esto es posible, porque me da errores de que no puede instanciar una clase abstracta y de que no encuentra el constructor por defecto.
A lo mejor tambien lo hago mal, la llamada al constructor de la clase abstracta lo he hecho de la siguiente forma: Código:
Encode::Encode(file);
Si alguien me lo puede aclarar se lo agradeceria.
|
No sé si sabrás que para que una clase sea abstracta, debes declarar al menos una función virtual pura dentro de la clase:
| Código: |
virtual void funcion_virtual_pura (void) = 0;
|
Además, la única finalidad de una clase abstracta es la de servir solamente como clase base para otras clases. Por lo tanto no se pueden crear o instanciar objetos de una clase abstracta, pero sí podemos crear objetos de las clases derivadas. Y es por eso, por lo que el compilador te da error: no se pueden crear objetos ni llamar a métodos de la clase abstracta, ya que no tienen implementación.
| Cita: |
Otra pregunta, alguien sabe alguna forma de cuando tienes un GroupBox, por ejemplo, y el GroupBox tiene Enable a false o true que los elementos internos del GroupBox tambien tengan el mismo valor para el Enable.
|
Cuando pones el Enabled de un GroupBox a false, la propiedad Enabled de los elementos que contiene el GroupBox no se ponen a false, pero no se pueden seleccionar. Intenta poner el foco en algún control dentro del GroupBox y verás que no es posible.
Si de todas formas quieres que cojan el valor Enabled del contenedor para que tengan un aspecto desactivado, puedes hacerlo con la siguiente función:
| Código: |
//función para activar/desactivar un GroupBox
void ActivarGroupBox (TGroupBox* box, bool siono)
{
box->Enabled = siono;
for (int n = 0; n < box->ControlCount; n++)
box->Controls[n]->Enabled = siono;
}
//ejemplo de llamada para desactivar un GroupBox
ActivarGroupBox(GroupBox1, false);
|
| Cita: |
Por ultimo, como puedo hacer para que cuando una ventana de mi aplicacion se maximize que los elementos que contiene ocupen la totalidad de la ventana, es que ahora mismo mantienen el mismo tamaño dejando un gran espacio vacio.
|
Puedes anclar los controles a su contenedor, en este caso el formulario para fijar sus coordenadas Left, Top, Width y Height. Para eso, tienes la propiedad Anchors. Prueba a modificar esta propiedad de algún control y ver el comportamiento de éste cuando cambias el tamaño del formulario en tiempo de diseño. Lo entenderás enseguida. Es una característica de los controles muy potente.
Un saludo |
|
| Volver arriba |
|
 |
koes Lt


Registrado: 19 Jul 2003Mensajes: 77Ubicación: A Laracha (A Coruña)
|
Publicado: Mie 26 Nov, 2003 7:10 pm Asunto: |
|
|
Gracias jaquemate por contestar tan rapidamente y a todas las preguntas. Contesto para aclarar la primera pregunta que ya he solucionado y es verdad que no puedes llamar a ningun metodo de una clase abstracta salvo al constructor desde el constructor de una de sus subclases de la siguiente forma:
| Código: |
__fastcall LameEncode::LameEncode(String fileIn)
: Encode(fileIn) {
}
|
Donde LameEncode es la subclase y Encode es la clase abstracta con el metodo virtual puro. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|