Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

MAX

Senior Schreiberling

  • "MAX" is male
  • "MAX" started this thread

Posts: 822

Date of registration: Dec 11th 2001

Location: Hannover

1

Friday, April 4th 2003, 12:46pm

Konstruktor überladen in C++

Hallo!!!
Ich habe folgendes Problem:
Nehmen wir an, wir haben folgende zwei Klassen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A
{
protected:
  //irgendwas
public:
  A();
  A(int degree);
}

class B : public A
{
private:
  //irgendwas
public:
  B(int a, int b);
}


Wie nicht schwer zu erkennen ist, handelt es sich um Vererbung. Ich möchte aber auch, dass ich ein Objekt vom Typ B unter Verwendung der Konstruktoren der Klasse A bilden kann.
Bsp.:
B var1;
B var2(2);

Ist das, was ich vorhabe, möglich? Wenn ja, wie ist es zu realisieren? So wie ich es jetzt geschrieben habe funktioniert es nicht.
mfg
MAX

T2k

Erfahrener Schreiberling

  • "T2k" is male

Posts: 339

Date of registration: Oct 9th 2002

Location: da drüben, gleich dort.

Occupation: Warum? Hmm, weil ich sonst nix mit meiner Zeit anzufangen weiß :D

2

Friday, April 4th 2003, 4:23pm

soweit ich weis geht das nur dadurch das man den konstruktor von A im Konstruktor von B wie folgt aufruft:

B() : A() {};
B(int degree) : A(degree) {};


T2k
Die zweithäufigste Todesursache eines Soldaten ist das Gewicht seines Rückentornisters ("http://olnigg.de/" Aug05/Nr120)

silence

Junior Schreiberling

Posts: 177

Date of registration: Dec 11th 2001

Location: reagenzglas

Occupation: tellerwäscher

3

Saturday, April 5th 2003, 2:04pm

Quoted

Original von MAX
B var2(2);

Ist das, was ich vorhabe, möglich?


Das Problem ist, dass der Konstruktor ja gerade dazu da ist, ein Objekt eines bestimmten Types zu initialisieren, im eigentlichen seine eigenen Attribute. Aus diesem Grund sind Konstruktoren der Superklasse A nicht von "aussen" von B zugänglich. Das erspart viele böse Fehlerquellen.

Dir bleibt daher nix anderes übrig als t2k schon erörtert hat.
"Wir stecken immer in der Scheisse, nur die Tiefe ändert sich."
(Ein unbekannter Softwareentwickler)

MAX

Senior Schreiberling

  • "MAX" is male
  • "MAX" started this thread

Posts: 822

Date of registration: Dec 11th 2001

Location: Hannover

4

Saturday, April 5th 2003, 11:44pm

ok

Danke schon mal! Ich werde es ausprobieren. So erspare ich mir viel tipparbeit und gewinne an übersichtlichkeit.
mfg
MAX

paradroid

Junior Schreiberling

Posts: 231

Date of registration: Feb 28th 2002

5

Monday, April 7th 2003, 9:02am

... wobei der default-Konstruktor von A (also A() ) immer dann aufgerufen wird, wenn du keinen anderen explizit angibst.

B() {}

ist also das selbe wie

B() : A() {}

# transmission terminated #