Вопрос по абстрактным базовым классам в с ++ - PullRequest
0 голосов
/ 22 февраля 2011

Предположим, класс stringGetter содержит ровно одну чисто виртуальную функцию: перегруженный тезис оператор, оператор строки () (int x). Также предположим, что класс getPageString является public stringGetter, который реализует operator ().

Какое из следующих утверждений C ++ обязательно приведет к ошибке компилятора?

(a) stringGetter * a = new stringGetter;
(b) stringGetter * a = new getPageString;
(c) stringGetter * a;
getPageString * b = new getPageString;
a=b
(d) Exactly two of these will result in a compiler error.
(e) It is possible that none of these will result in a compiler error.

Я немного размышляю об абстрактных базовых классах и не могу найти в Интернете хороших примеров, которые выполняют задания, подобные приведенным ниже. Мне нравится задавать здесь вопросы о таких вещах, так как я часто узнаю больше о вещах, которые я даже не собирался изучать. Я даже не могу догадаться, что из этого может вызвать ошибку компилятора. Может кто-нибудь пройти через a-c и сказать мне, почему или почему это не вызвало бы ошибку компилятора?

Ответы [ 4 ]

8 голосов
/ 22 февраля 2011

(a) приводит к ошибке компилятора, так как экземпляры не могут быть созданы для абстрактных классов.

1 голос
/ 22 февраля 2011

Вы не можете иметь экземпляры абстрактного класса, который исключает (а). Вариант (с) является просто более сложным способом выполнения (б).

0 голосов
/ 22 февраля 2011

Выглядит как вопрос с подвохом. (a) определенно приводит к ошибке компилятора, как уже говорилось, и вы уже получили отличный ответ на вопрос, почему. Однако в варианте (с) точка с запятой после оператора «a = b» отсутствует. Это также приведет к ошибке компилятора, так как это синтаксическая ошибка. Обратите внимание, что в вопросе не сказано «Что из этого вызовет ошибку компилятора из-за создания экземпляров класса?»

0 голосов
/ 22 февраля 2011

(a) - фактическое создание абстрактного класса (new stringGetter) происходит только там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...