Objekt in Klasse ohne Standardkonstruktor

Gast #6080454
Lesenswert?

Hallo,

mal angenommen ich lege in einer Klassendefinition ein Attritbut an, 
welches ein Objekt einer anderen Klasse ist, welche jedoch keinen 
Standardkonstruktor besitzt, wie gehe ich dann korrekt vor?
1
class obj{
2
  public:
3
    obj(int x);
4
  private:
5
    int var;
6
}
7

8
class test{
9
  public:
10

11
  private:
12
    obj Objekt;
13
}

Ich möchte ungern zunächst ein Objekt von der Klasse obj erzeugen und 
dieses dann einer Instanz der Klasse test über einen Pointer/Referenz 
übergeben.

Gibt es da eine elegantere Lösung?

Das Codebeispiel ist wirklich nur ein Beispiel :).
Gast #6080459
Lesenswert?

Achso, was ich noch vergaß: Was mache ich zusätzlich, wenn dieses Objekt 
wiederum einen Zeiger auf ein drittes Objekt haben möchte, welches sich 
innerhalb des Objektes befindet?
1
class obj1{
2
  public:
3
  private:
4
}
5

6
class obj2{
7
  public:
8
    obj(obj1 Objekt);
9
  private:
10
    obj1 & Objekt;
11
}
12

13
class test{
14
  public:
15

16
  private:
17
    obj1 Objekt1;
18
    obj2 Objekt2(this->Objekt1); //Das macht natürlich einen Fehler
19
}
#6080461
Lesenswert?

Jens schrieb:
> class obj{
>   public:
>     obj(int x);
>   private:
>     int var;
> }
>
> class test{
>   public:
>
>   private:
>     obj Objekt;
> }

Kommt drauf an, was Du möchtest:
1
class obj{
2
  public:
3
     explicit obj(int x = 0);
4
   private:
5
    int var{0};
6
}
7

8
class test{
9
  public:
10

11
  private:
12
     obj Objekt{0};
13
 }

Entweder schaffst Du Dir einen std-ctor (s.o.), oder Du initialiserst 
das member richtig, oder ...
Gast #6080470
Lesenswert?

Bitte sehr.

class obj1{
  public:
    obj1(int x);
  private:
    int var;
};

class obj2{
  public:
    obj2(obj1 Objekt);
  private:
    obj1 & Objekt;
};

class test{
  public:
    test():
      Objekt1(19),
      Objekt2(Objekt1)
    {
    }
  private:
    obj1 Objekt1;
    obj2 Objekt2;
};
Gast #6080475
Lesenswert?

NichtWichtig schrieb:
> Klingt nach unüberlegtem Design.

Für mich klingt das eigentlich sehr überlegt. Ein Beispiel aus einem 
µC-Projekt:

1. Klasse: Usart
2. Klasse: OneWire(Usart)
3. Klasse: Quasi das eigentliche Programm.

Die 3. Klasse beinhaltet nun ein Objekt von Klasse1 und Klasse2, muss 
aber dem Objekt von Klasse2 eine Referenz auf das eigene Klasse1 Objekt 
übergeben.

Für mich ist es schlechtes Design, zunächst Klasse1 und Klasse2 leer 
oder außerhalb zu deklarieren und dann mit Pointer und Referenzen zu 
hantieren, was ich derzeit noch mache. Klasse1/2 gehören in Klasse3.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren