2015-11-09 4 views
0

Существует вопрос о домашнем задании, который спрашивает, какая конструкция в C++ похожа на интерфейс Java. Интерфейс в Java можно назвать чистым абстрактным классом, и я знаю, что C++ имеет абстрактные классы, но являются чистыми абстрактными классами, что C++ официально имеет?Существуют ли чистые абстрактные классы в C++?

Возможно, с точки зрения дизайнера C++ это не так, но технически можно создать чистый абстрактный класс в C++, сделав все методы абстрактными правильно?

Я смотрел на this ресурсе, но я до сих пор путаю после прочтения некоторых ответов ...

+1

C++ не применяет какой-либо конкретный стиль программирования, вы можете выполнять процедуры, или ООП, или шаблоны. Это также позволяет * создавать интерфейс только с чистыми виртуальными функциями, но это не заставляет вас. Вы также можете использовать множественное наследование с нечистыми базовыми классами - ваш выбор! –

ответ

3
class Foo { 
public: 
    Foo(); 
    virtual ~Foo() {}; 
    virtual void bar() = 0; 
} 

Foo является чистый абстрактный класс в C++, поскольку он содержит метод bar(), который является чистым виртуальным методом.

+1

Вы также должны использовать виртуальный деструктор –

+0

Я не очень хорошо знаю C++, поэтому один вопрос здесь; являются ли конструкторы и декларации деструкторов действительно обязательными здесь, учитывая, что класс не имеет состояния? Не заполняет ли это C++ по умолчанию? Поскольку я делаю Java, правила, конечно, разные, но я хотел бы знать ... – fge

+0

@fge В C++ базовый конструктор и деструктор вызывается при вызове деструктора конструктора производного класса. Ваш код, вероятно, будет компилироваться и запускаться без конструктора и деструктора. Но чтобы избежать перехода на неопределенную территорию, вы должны иметь виртуальный деструктор, по крайней мере. Как было указано мне, когда я ответил на этот вопрос и забыл объявить деструктор виртуальным;) См. [Этот ответ] (http://stackoverflow.com/a/461224/1517864) о виртуальных деструкторах. – jayant

3

Да, вы можете создать абстрактный класс в C++

class A { 

public: 
    A() {}; 
    virtual ~A(){}; 
    virtual void temp() = 0; 
}; 

int main() { 
    A a; // compiler error 
} 
+0

почему -1? можете ли вы объяснить plz? – KostasRim

+0

не пустой избиратель, а чистый абстрактный класс должен иметь виртуальный деструктор. – NathanOliver

+0

@NathanOliver для простого класса, такого как нет, вам не нужен деструктор ... – KostasRim

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