Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konstruktor Frage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.03.2008, 09:24 Uhr
~Felipe Carvalho
Gast


Hallo!

Angenommen, dass eine Basis-Klasse "A" kein Kronstruktor hat.

Die Klasse "B" wurde von der Klasse "A" vererbt und soll ein Konstruktor enthalten.

Beim Compilieren will der Compiler den Konstruktor von "A" initialisieren obwohl es gar nicht gibt.

Frage:
Gibt es die Möglichkeit, wenn ein Objekt "B" erzeugt wird ohne dass der Konstruktor von "A" aufgeruft wird? Wie gesagt "A" hat kein Konstruktor.


Gruß und Danke,
Felipe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.03.2008, 09:49 Uhr
ao

(Operator)


Du meinst so? Das geht bei mir.


C++:
class A
{
};

class B : public A
{
public:
    B () { }
};

int main (void)
{
    B b;
    return 0;
}




ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.03.2008, 10:02 Uhr
~Felipe Carvalho
Gast


Ja genau!

Ist es so möglich? Bzw. Wie kann ich den Compiler zuweisen, dass er den Konstruktor von "A" nicht aufruft?


Viele Danke
Felipe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2008, 11:38 Uhr
0xdeadbeef
Gott
(Operator)


Der Compiler generiert implizit einen Default-Konstruktor, der die Default-Konstruktoren der Member-Variablen aufruft und ansonsten garnichts tut. Zum Beispiel:

C++:
#include <iostream>

struct A {
  A() { std::cout << "A::A()" << std::endl; }
};

struct B {
  A a;
};

int main() {
  B b;
}


wird die Ausgabe

Code:
A::A()


erzeugen, weil der implizit erstellte Default-Konstruktor von B A::A() aufruft. Ein Default-Konstruktor wird erzeugt, wenn keine anderen Konstruktoren spezifiziert sind (irgendwie muss das Objekt ja erstellt werden), und das funktioniert nur dann, wenn das Objekt keine Referenzen als Member enthält, weil die bei der Instanziierung des Objektes initialisiert werden müssen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 06.03.2008 um 11:40 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.03.2008, 12:46 Uhr
ao

(Operator)



Zitat von ~Felipe Carvalho:
Wie kann ich den Compiler zuweisen, dass er den Konstruktor von "A" nicht aufruft?

Irgendein Konstruktor wird immer aufgerufen. Was ist das Problem damit?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.03.2008, 16:23 Uhr
~Felipe Carvalho
Gast


Also die Quellcode von "ao" ist wie ich gemeinte habe! Die Klasse "A" hat kein Konstruktor aber die abgeleitete "B"Klasse von A, enthält ein Konstruktor.

Beim compilieren meldet sich der Compiler, und gibt mir eine Fehlermeldung, dass die Klasse "A" keinen Standard-konstruktor enthält.

@0xdeadbeef - So fonktioniert bei mir auch! Andersrum leider nicht!


Zitat:

Irgendein Konstruktor wird immer aufgerufen. Was ist das Problem damit?



Ich kann leider die Klasse "A" nicht modifizieren und dewegen ist es ein Problem für mich!


Danke,
Felipe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.03.2008, 16:36 Uhr
Kest
saint


Hi!

Zeige doch mal die Klassen. Was genau für eine Fehlermeldung wird ausgegeben?
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.03.2008, 19:16 Uhr
Th



Ich nehme an, die Basisklasse hat keinen parameterlosen Standard-Konstruktor, d.h. du mußt beim Ableiten einen Konstruktor mit Parametern aufrufen.

C++:
class A
{
public:
   A(int x) // Beispiel für Konstruktor mit Parameter
   {
   }
};

class B : public A
{
public:
   B() : A(42) // Aufruf des Basiskonstruktors mit einem Parameter
   {
   };
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: