2017-05-13 1 views
2

Ich habe eine Zuordnung, wo ich "Erstellen Sie eine Klasse namens Number, die von String abgeleitet ist. Sie werden dies als Basisklasse verwenden, um Ihre Integer und Double-Klassen abzuleiten." Es wird weiter gesagt, dass der Datenabschnitt aus den Integer- und Double-Klassen "weggehen" wird.Klasse abgeleitet von Zeichenfolge als Datenabschnitt verwendet

"Da die Zahl von String abgeleitet ist und Integer und Double von Number abgeleitet sind, werden sie alle zu Strings. Dies gibt Ihnen einen integrierten Datenabschnitt." Was ich nicht verstehe, ist, wo mein Datenbereich jetzt ist. Wie rufe ich es an und ändere es.

„An diesem Punkt Ihre Nummer Klasse wird nur den folgenden Code enthalten:

-A kein Argument Konstruktor, der den Datenabschnitt setzt auf‚0‘

-Eine überladenen Konstruktor, der einen String und setzt nimmt Der Datenabschnitt wird an den Wert übergeben. "

//Number class with the two constructors 
#ifndef NUMBER 
#define NUMBER 

#include <iostream> 
#include <string> 
using namespace std; 

class Number: public string 
{ 
public: 
    Number() : string("0") { } 
    Number(string s) : string(s) { } 
}; 
#endif 

Doppel Klasse

//Double class 
#ifndef DOUBLE 
#define DOUBLE 
#include <string> 
#include "Integer.h" 
#include "Number.h" 
using std::string; 
class Double: public Number 
{ 
private: 
    // do i call Number here? like Number data; or double data;? 
    // or is the data not here? 
    void isNan(string s); 
    bool nan = false; 
    void recursiveNaN(string::iterator p, string::iterator n); 

public: 
    // Constructors 
    Double(); 
    Double(double d); 
    Double(const Double &d); 
    Double(const Integer &i); 

    // Functionality 
    void equals(double d); 
    Double &equals(const Double &d); 
    Double add(const Double &d); 
    Double sub(const Double &d); 
    Double mul(const Double &d); 
    Double div(const Double &d); 
    double toDouble() const; 

    //Primitives 
    Double add(double d); 
    Double sub(double d); 
    Double mul(double d); 
    Double div(double d); 

    // Operator Overload 
    Double operator + (const Double &d); 
    Double operator - (const Double &d); 
    Double operator * (const Double &d); 
    Double operator/(const Double &d); 
    Double &operator = (const Double &d); 
    bool operator == (const Double &d); 
    bool operator == (double d); 
    bool operator != (const Double &d); 
    bool operator != (double d); 

    //String stuff 
    Double(string s); 
    bool isNan(); 
    void equals(string s); 
    Double &operator = (string s); 
    string toString(); 
}; 



#endif // !DOUBLE 

Einer unserer Hinweise war auf die Leere quals (double d) Funktion. Der Hinweis war, das d in eine Zeichenkette umzuwandeln und dann das Gleichheitszeichen mit überladenem Zeichenfolgenargument aufzurufen, um dies-> zuzuweisen.

void Double::equals(double d) 
{ 
    stringstream ss; 
    ss << d; 
    this->equals(ss); 
} 
void Double::equals(string s) 
{ 
    this->isNan(s); 
    if (!this->isNan()) 
     this->assign(s); 
    else 
     this->assign("0.0"); 
} 

In meinem Kopf würde das sein, was er meinte, aber das gibt mir und Fehler, dass es keine Member-Funktion, die nur zu equals.I Anrufen müssen wissen, wie diese neuen Daten zu nennen, und wie es zu ändern. Meine Nummer-Klasse kann auch keine Funktionen mehr haben.

+4

Sie sollten beachten, dass C++ - Standardbibliotheksklassen im Allgemeinen nicht gut geeignet sind, um sie zu erben, z. mit 'std :: string' gibt es keine' virtuellen' Funktionen, die man überschreiben kann, also ist das Erben etwas sinnlos. Es ist wahrscheinlich besser, nur eine interne 'std :: string' Membervariable zu verwenden. –

+1

Wer würde sogar eine Zahlenklasse von einer String-Klasse ableiten ?? – zett42

+0

Ja ich weiß nicht, wie praktisch abgeleitet von String ist, aber es ist für die Zuordnung erforderlich. – dnun99

Antwort

0

Was ich nicht verstehe, ist, wo mein Datenabschnitt jetzt ist. Wie rufe ich es an und ändere es.

Sie nicht. Eine Zahl ist ein String, da Sie von String abgeleitet sind. Welche zusätzlichen Daten möchten Sie? Sie rufen es auf, indem Sie eine Memberfunktion von std::string aufrufen oder eine Instanz Ihrer Klasse an eine Funktion übergeben, die eine std::string (oder eine Referenz auf eine) übernimmt.

Verwandte Themen