Изучаю тему наследования по практикуму учебника 2010 года. Там есть пример, который я взял для изучения вопроса наследования, где используется базовый абстрактный класс. Я создавал объект от абстрактного для унаследованного класса (поправьте если не прав) и у меня ничего не получается, компилятор упорно стоит на том что есть ошибки.
Базовый класс AString.h
#pragma once
#ifndef ASTRING_H
#define ASTRING_H
#include<string>
class AString
{
public:
virtual ~AString() {}
virtual const std::string& GetName() = 0;
virtual const std::string& GetVal()const = 0;
virtual int GetSize()const = 0;
};
Унаследованный SymbString.h
#pragma once
#include <string>
#include "AString.h"
class SymbString :public AString
{
public:
SymbString(std::string _name) :name(_name) {}
SymbString(std::string _name, std::string _val) :name(_name), val(_val) {}
const std::string& GetName()const { return name; }
const std::string& GetVal()const { return val; }
int GetSize()const { return val.size(); }
private:
std::string name, val;
};
И файл где можно создавать объектов столько, сколько хочет пользователь:
....
AString* pNewObj;
switch (item)
{
case 1: pNewObj = new SymbString(name, value);// тут подчеркивает и пишет "использование
//объекта абстрактного типа класса "SymbString" не допускается чисто
//виртуальная функция функцию "AString::GetName" не имеет оператора переопределения "
break;
case 2: if (!IsHexStrVal(value))
{
cout << "Error!" << endl;
return;
}
pNewObj = new HexString(name, value);// выводит тоже самое только для этого случая
break;
}
То что написал компилятор ("использование объекта абстрактного типа класса "SymbString
" не допускается чисто виртуальная функция функцию "AString::GetName
" не имеет оператора переопределения") вызывает непонимание что от меня хотят. Разве для SymbString
и HexString
я не могу создавать объекты?
Переписывал с учебника код слово в слово.
Вы определяете новую версию GetName() const
(константную), а не переопределяете абстрактную GetName()
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю всё по книге "Создание сетевых приложений в среде Linux: Руководство разработчика"Не компилируется
Пытаюсь реализовать умножение строковых чисел стобикомНа вход подается два числа, записанные в string
Делаю вывод текста в QLabel из базы данныхВ разных случаях текста может быть много, а может вообще не быть