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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.