2016-04-07 7 views
0

Ich arbeite an einem Projekt für meinen Informatikunterricht und bin gerade in den Unterricht eingeführt worden. Ich bin fertig (denke ich) und baue die Klassen, die ich brauche, aber ich habe Probleme, sie zu implementieren. Das habe ich für meine main.cpp:Objekt des abstrakten Klassentyps "CLASSNAME" nicht erlaubt?

#include "ElectronicComponent.h" 
#include "Resistor.h" 
#include "Capacitor.h" 
#include "Battery.h" 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    const int NUMBER_OF_COMPONENTS = 7; 
    ElectronicComponent 
     *components[NUMBER_OF_COMPONENTS] = 
    { 
     new Resistor(5.0),  // These are where my errors are. 
     new Capacitor(0.0001), 
     new Battery(9.0), 
     new Resistor(6.5), 
     new Battery(11.1), 
     new Capacitor(0.000001), 
     new Resistor(10000.0), 
     /* create more components here */ 
    }; 
    return 0; 
} 

Und das ist ein Beispiel für eine der Klassen.

#include "ElectronicComponent.h" 
class Resistor : 
    public ElectronicComponent 
{ 
public: 
    Resistor(double); 
    virtual ~Resistor(); 
    virtual double getValue() const = 0; 
    virtual std::string getUnits() const = 0; 
    virtual std::string to_string() const = 0; 
}; 

.

#include "Resistor.h" 
#include <string> 
double value; 
std::string units = "Ohm(s)"; 

Resistor::Resistor(double v) 
{ 
    value = v; 
} 

Resistor::~Resistor() 
{ 
} 

std::string Resistor::to_string() const 
{ 
    return "Resistor value (" + std::to_string(value) + " " + units + ")"; 
} 
  1. Für jedes Element in der ElectronicComponent Array soll ich rufen Sie die getValue und getUnits Funktionen Mitglied und die Ergebnisse anzuzeigen. Verwendung der ElectronicComponent Artikel

  2. Go durch die ElectronicComponent Array ein zweites Mal, und das Ausgangssignal anzuzeigen.

Hier ist ein Beispiel (Komponenten annehmen, ist die Anordnung von ElectronicComponent Zeiger):

cout << "Component " << count << " " << *components[index] << endl; 

Das Ziel, die hartcodierte Zahlen zu verwenden ist schließlich wie diese eine Ausgabe zu erhalten:

Component 0 Resistor value (5.000000 Ohm(s)) 
Component 1 Capacitor value (0.000100 Farad(s)) 
Component 2 Battery value (9.000000 Volt(s)) 
Component 3 Resistor value (6.500000 Ohm(s)) 
Component 4 Battery value (11.100000 Volt(s)) 
Component 5 Capacitor value (0.000001 Farad(s)) 
Component 6 Resistor value (10000.000000 Ohm(s)) 

Antwort

0

Resistor ‚s (und ich nehme an, Ihre andere ElectronicComponent abgeleiteten Klassen) Methoden, die keine = 0 a haben sollten t das Ende ihrer Erklärung.

Die = 0 in und Resistor andere Methoden bedeutet, dass die Methode eine reine virtuelle Funktion ist. Das heißt, es ist nicht implementiert und existiert nur als eine Schnittstelle, die in abgeleiteten Klassen überschrieben werden soll. Eine Klasse, die reine virtuelle Methoden enthält, kann nicht instanziiert werden.

Verwandte Themen