Serg89
@Serg89
Изучаю. Читаю.

Как создать экземпляр класса, реализующего интерфейс?

Создаю абстрактный класс :
class iClass {
public:
void method1();
virtual method2();
}

class myClass : public iClass {
/*тут методы родителя*/
void method3();
}


Как правильно создать экземпляр класса myClass через интерфейс iClass и использовать у этого экземпляра method3()?

QtCreator говорит делать так :
iClass c = new myClass();

но после этого у объекта с нет метода method3().
  • Вопрос задан
  • 409 просмотров
Пригласить эксперта
Ответы на вопрос 2
Serg89
@Serg89 Автор вопроса
Изучаю. Читаю.
Вопрос решился приведением типа :
myClass c = (myClass * ) new iClass();
Ответ написан
Nipheris
@Nipheris Куратор тега C++
Жесть полная.

class iClass {
public:
void method1();
virtual method2();
}


Это не абстрактный класс, у абстрактного должно быть недоопределенное поведение, т.е. хотя бы один pure-virtual метод. У вас есть виртуальный метод, но для него ожидается релазация. Если бы iClass был бы абстрактным, то код
new iClass();
никак бы не скомпилился

Как правильно создать экземпляр класса myClass через интерфейс iClass и использовать у этого экземпляра method3()?


Правильно - никак, задача поставлена некорректно. Если у вас есть некоторый интерфейс, работать нужно через него. Если вам нужно создавать экземпляры различных классов-реализаций, вы должны писать new КонкретныйКласс(), а потом уже при желании, приводить к типу интерфейса. Если вам нужен method3, то вам НЕ НУЖЕН iClass, вам нужен myClass, т.к. именно В НЕМ есть method3.

Если у вас будет стоять задача создания экземпляра конкретного (неабстрактного) класса в зависимости от каких-то параметров, почитайте про фабрики. Но для начала разбреритесь с основами, вы пока не понимаете, что делаете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы