Forum: Mikrocontroller und Digitale Elektronik Objekt in Klasse ohne Standardkonstruktor


von Jens (Gast)


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 :).

von Jens (Gast)


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
}

von NichtWichtig (Gast)


Lesenswert?

Klingt nach unüberlegtem Design.

von Wilhelm M. (wimalopaan)


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 ...

von Wilhelm M. (wimalopaan)


Lesenswert?

Jens schrieb:
> welches sich
> innerhalb des Objektes befindet?

Don't do that. Exportiere die privates nicht ...

Aber: vielleicht beschreibst Du einfach mal, was Dein Problem ist.

von lutz (Gast)


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;
};

von Jens (Gast)


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.

von Jens (Gast)


Lesenswert?

DOch mit Initializer Liste. Probiere ich mal aus, danke.

von Jens (Gast)


Lesenswert?

Danke, das funktioniert!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.