2016-02-16 2 views
0

Для басового класса, который имеет виртуальную функцию, обычно называют «полиморфным базовым классом». В этом случае Car классаЯвляется ли «полиморфный базовый класс» частью стандарта C++?

class Car 
{ 
virtual void drive(){std::cout << "drive right";} 
}; 

class EuropeCar: public Car 
{ 
void drive(){std::cout << "drive left";} 
} 

ли polymorphic base class общий жаргон, такие как pure abstract class или часть стандарта C++?

+3

Эх, это только Великобритания, которая двигается слева. Я чувствую себя оскорбленным. – emlai

+2

Британский и французский как в Европе, так и по разным дорогам.Заметка перед несчастным случаем в отпуске –

ответ

4

Стандарт упоминает полиморфный класс конкретно, например, в 10.3.1:

Виртуальные функции поддержки динамического связывания и объектно-ориентированное программирование . Класс, объявляющий или наследующий виртуальную функцию, представляет собой , называемый полиморфным классом .

Он также говорит о абстрактных классов и чистых виртуальных функциями, как в 10.4.2:

абстрактного класса это класс, который может быть использован только в качестве базовый класс другой класс; никакие объекты абстрактного класса не могут быть созданы , кроме как подобъекты производного от него класса. Класс является абстрактным , если он имеет хотя бы одну чистую виртуальную функцию.

Там нет конкретных упоминания о чисто абстрактный класс (или чистого виртуального классе), только чисто виртуальных функций.

N.B: Это основано на черновике стандарта n3376.

1

Я не уверен насчет «сленга», но чистый абстрактный класс в C++ имеет определенное значение.

Чистый абстрактный базовый класс в C++ имеет только абстрактные функции-члены (что означает, что все они объявлены virtual <return_type> <func_name>() = 0), и нет данных или конкретных функций-членов.

Полиморфный базовый класс здесь является гораздо более слабым термином в сравнении.

+0

Как я читал, это не упоминание стандартов? –

+0

Это просто слова, чтобы передать известную идею кратко, если вы сказали: «Я создал чистый абстрактный базовый класс», я автоматически знаю, что ваш класс имеет только абстрактные функции-члены и не содержит данных или конкретных данных. – shafeen

+0

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

2

Стандарт C++ 14 делает определение термина "полиморфный класс" (10.3/1):

Класс, который объявляет или наследует виртуальная функция называется полиморфный класс.

Но он не использует термин «полиморфный базовый класс».

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