У меня есть абстрактный класс:Невозможно создать экземпляр абстрактного класса
class myabsclass {
public:
virtual int func1() = 0;
virtual int func2() = 0;
};
И классы, которые реализуют его:
class myclass : public myabsclass {
public:
myclass() {}
int func1() { return 0; }
int func2() { return 1; }
private:
int a,b,c;
}
class myclass2 : public myabsclass {
public:
myclass2() {}
int func1() { return 3; }
int func2() { return 4; }
private:
int d,e,f;
}
Если у меня есть вектор, который содержит различные типы implementions в myabsclass абстрактного класса :
vector<myabsclass> vec;
Я получаю сообщение об ошибке, когда я пытаюсь сделать это:
vec.push_back(myclass);
vec.push_back(myclass2);
Сообщение об ошибке в VS2013 является:
Cannot instantiate abstract class
Я пытаюсь понять, почему, учитывая, что я считаю, что это должно быть справедливо. Вектор должен содержать все различные типы реализаций этого класса, поэтому я не могу позволить себе явно сделать это вектор реализаторов:
vector<myclass> vec; // Wont work since I need to put myclass2 in there.
Любые идеи о том, почему компилятор душит? Это ошибка компилятора?