2016-10-02 3 views
0

Dies ist meine erste große Aufgabe in OOP in C++. für meinen Kopf der folgende Klassendefinition gegeben Ich habe: die das aktuelle Objekt in einer Art und Weise arbeitenAnfänger in OOP in C++, Zuordnungsprobleme

using namespace std; 

class Fraction 
{ 
    public: 
    Fraction(void); 
    Fraction(int aN, int aD); 
    int getNumerator(); 
    int getDenominator(); 
    Fraction adder(Fraction aF); 
    ~ Fraction(void); 
} 

Die Zuordnung sagt, dass die Addiererfunktion soll, wo der erste Operanden und der Parameter der Funktion ist zweiter Operand. Ex. Wenn das Objekt 1/6 und der Parameter 1/3 ist, dann soll der Addierer 3/6 ergeben.

Meine Fragen sind folgende:

a) Sowohl getNumerator() und getDenominator() gesetzt eine ganze Zahl zurück, aber ich habe keine Ahnung, welche Addierer (Fraktion aF) soll zurückzukehren. Es besagt, dass es eine Instanz der Klasse Fraction zurückgeben soll. Es kann keine Ganzzahl sein, obwohl mein Produkt zwei erzeugen soll, wenn wir die im Konstruktor festgelegten Parameter verwenden.

zum Beispiel ist dies die CPP ich bisher gebaut haben:

#include "fraction.h" 
#include <string> 

Fraction::Fraction() 
{ 
} 

Fraction::Fraction(int aN, int aD) { 
    numerator = aN; 
    denominator= aD; 
} 

int Fraction::getNumerator() { 
    return numerator; 
} 

int Fraction::getDenominator() { 
    return denominator; 
} 

Fraction Fractiom::adder(Fraction aF) { 
    aF = 1/3?  
    return ?? 
} 

Fraction::~Fraction() 
{ 
} 

Das Problem ist nicht die Arithmetik. Ich kann das herausfinden. Ich weiß nur nicht, was dieser Funktionsaddierer zurückgeben kann. Ich brauche das einfachste Beispiel, also einfach über alles Kompilieren, nur damit ich weiß, mit welcher Größe ich es zu tun habe (eine ganze Zahl, eine einzelne Zeichenfolge usw.)

Dann schauen wir uns die Quelle an, die ich gemacht habe.

#include <iostream> 
#include "fraction.h" 
using namespace std; 

int main() { 

    Fraction f1(1, 6); 
    cout << f1.getNumerator() << "/" << f1.getDenominator() << endl; 
    cin.get(); 
    return 0; 
} 

Das erste Beispiel zeigt, wie ich getNumerator() und getDenominautor() to produce a random Fraction` verwenden.

b) Ich nehme an, ich kann f1.adder(aF) schreiben, um mein Produkt zu produzieren, wenn ich die Arithmetik in der cpp richtig bekomme, oder ist diese Annahme falsch?

+0

Meine Haupt enthalten die Addierer-Funktion, neben dem Problem, ich kann nicht aF mit und int gleichsetzen, da es ein Fraction-Objekt ist. Ich bekomme nur keinen Operator = = stimmt mit diesen Operanden überein. – Morphalog

+0

1) Ich meinte, es ist noch nicht Teil der wichtigsten. 2) Ich glaube, ich verstehe deinen Standpunkt falsch. Es scheint, als ob du sagst, dass ich die Integrale in f1 ändern kann, um einen neuen Bruch zu bekommen, aber ich weiß das. Ich weiß nicht, wie ich meine aF initialisieren oder wie ich meinen Addierer erstellen kann, ein Bruchobjekt zurückgeben – Morphalog

+0

Sie müssen 'aF' nicht zurückgeben, stattdessen eine andere' Fraction' wie 'Fraction result (..., ...) initialisieren ; return result; 'oder mache es direkt in der return-Anweisung, wie madmax zeigt. – BeyelerStudios

Antwort

3

a) Es ist klar, dass Ihre Methode Fraction :: Addierer andere Fraktion Objekt wie folgt zurückgeben muss:

... 
return Fraction(resultingNumeratorHere, resultingDenominatorHere); 

b) Auf jeden Fall. Sie müssen die Arithmetik in der cpp implementieren

+0

Ich habe versucht, Return Fraction zu schreiben (getnumerator(), getdenominator) – Morphalog

+0

Ich habe versucht, Return Fraction (getnumerator(), getdenominator) zu schreiben, nur um eine zufällige Fraktion zurück zu bekommen, ohne tatsächlich etwas hinzuzufügen. Das Problem ist, wenn ich zu meinem Haupt gehe, versuche ich etwas wie cout << b1.adder() << endl ;. aber es sagt zu wenigen Argumenten in meinem Funktionsaufruf. Ich muss etwas in Addierer hinzufügen() nehme ich an, aber was? – Morphalog

+0

In diesem Fall geben Sie die genaue Kopie Ihres Objekts zurück. Sie müssen so etwas wie folgt verwenden: Fraktion Fraktion :: Addierer (Fraktion af) { return Fraktion (Zähler * af.denominator + Nenner * af.numerator, Nenner * af.Nenner); } – madmax