2016-04-07 6 views
0

Я работаю над проектом для своего класса информатики и просто познакомился с классами. Я закончил (я думаю), строя классы, которые мне нужны, но у меня возникли проблемы с их реализацией. Это то, что у меня есть для моей main.cpp:Объект абстрактного класса типа "CLASSNAME" не разрешен?

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

И это пример одного из классов.

#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. Для каждого элемента в массивеElectronicComponent следует называть ПолучитьЗначение и getUnits функций-членов и отображения результатов.

  2. Перейти через массив ElectronicComponent во второй раз, и вывода изображения с помощью ElectronicComponent элемента.

Вот пример (предположим, что компоненты является массив ElectronicComponent указатели):

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

Цель состоит в том, чтобы использовать жестко закодированные номера, чтобы в конечном итоге получить такой вывод:

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

ответ

0

Resistor «s (и я полагаю, ваши другие ElectronicComponent производных классов) методы не должны иметь = 0 конец их декларации.

= 0 in virtual double getValue() const = 0; и Resistor другие методы означают, что метод является чистой виртуальной функцией. То есть он не реализован и существует только как интерфейс, который должен быть переопределен в производных классах. Класс, который содержит чистые виртуальные методы, не может быть создан.

Смежные вопросы