2017-06-25 5 views
0

Statt dies zu tun, und halten auf redundanten Code für alles machen:eine Klasse als Parameter c vorbei ++

Molecule::Molecule(Hydrogenyx& h){ 
    //some code 
} 

Molecule::Molecule(Carbonyx& c){ 
    //same code as hydro 
} 

Molecule::Molecule(Sulphuryx& s){ 
    //same code 
} 

ist es eine Möglichkeit, ich es einfach machen kann, so dass es wie folgt aus ?:

aussehen kann
Molecule::Molecule(x){ 
    //code that can apply to all 
} 
+3

Warum haben Sie eine separate Klasse für jedes Atom? Scheint mir sehr überladen. – StoryTeller

+0

Da Sie mit chemischen Elementen arbeiten, sollten Sie Vererbung und Polymorphie in C++ nutzen. Erstellen Sie eine Klasse, sagen Sie Element, und lassen Sie die chemischen Elemente Attribute und Eigenschaften nach Bedarf vererben. Dann könntest du so etwas machen ** Molekül :: Molekül (Element * Element) {// Code, der für alle gelten kann} **. –

Antwort

2

ist es eine Möglichkeit, ich es einfach machen kann, so dass es aussehen kann wie folgt

sicher ?:. Sie können eine Memberfunktionsvorlage verwenden.

Erklärung:

template <typename T> Molecule(T& t); 

Umsetzung:

template <typename T> 
Molecule::Molecule(T& t){ 
    // The common code. 
} 
0

Ein Beispiel für Ben cisneros Kommentar wäre folgendes:

class Example { 
    // shared code 
} 

class Hydrogenyx : public Example { 
    // code for Hydrogenyx 
} 

Damit Sie so etwas tun kann:

Example* ex; 
Hydrogenyx hx(/*Construcr things*/) 
ex = &hx; 

Funktionen wie die von Ihnen beschriebenen würden das Objekt automatisch hochstufen.

+0

Danke @fraxxz für das Schreiben des Beispiels :-) –

Verwandte Themen