Эквивалент интерфейсов Java в С++?
Возможный дубликат:
Как вы объявляете интерфейс на С++? Интерфейс как в java в С++?
Я программист Java, изучающий С++, и мне было интересно, есть ли что-то вроде Java-интерфейсов в С++, то есть классы, которые другой класс может реализовать/расширить более одного.
Благодарю.
постскриптум Здесь, вот так скажите, если я сделал что-то не так.
Ответы
Ответ 1
В С++ класс, содержащий только чистые виртуальные методы, обозначает интерфейс.
Пример:
// Define the Serializable interface.
class Serializable {
// virtual destructor is required if the object may
// be deleted through a pointer to Serializable
virtual ~Serializable() {}
virtual std::string serialize() const = 0;
};
// Implements the Serializable interface
class MyClass : public MyBaseClass, public virtual Serializable {
virtual std::string serialize() const {
// Implementation goes here.
}
};
Ответ 2
Чтобы эмулировать Java interface
, вы можете использовать обычную базу только с чистыми виртуальными функциями.
Вам нужно использовать виртуальное наследование, иначе вы можете получить повторное наследование: тот же класс может быть базовым классом более одного раза в С++. Это означает, что доступ этого базового класса в этом случае был бы неоднозначным.
С++ делает не предоставление точного эквивалента Java interface
: в С++ переопределение виртуальной функции может выполняться только в производном классе класса с объявлением виртуальной функции, тогда как в Java, переопределитель для метода в interface
может быть объявлен в базовом классе.
[Пример:
struct B1 {
void foo ();
};
struct B2 {
virtual void foo () = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
наследует также объявления функций: B1::foo()
и B2::foo()
.
B2::foo()
является чисто виртуальным, поэтому D::B2::foo()
тоже; B1::foo()
не переопределяет B2::foo()
, потому что B2
не является производным классом B1
.
Таким образом, D
является абстрактным классом.
- конец примера]
Во всяком случае, , почему вы эмулируете произвольные пределы Java в С++?
EDIT: добавлен пример для пояснения.