Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.59.31] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте! Нужно привести пример неизменяемого класса и класса от которого нельзя наследоваться.
|
Сообщ.
#2
,
|
|
|
struct A { virtual ~A() final; }; struct B : public A { // error }; Добавлено а что такое не изменяемый класс я не понял |
Сообщ.
#3
,
|
|
|
А что такое final?
Я всегда думал что если класс имеет приватный деструктор - то от него нельзя отнаследоваться, но вот эти всякие final - херня какая то... Это из нового стандарта? Добавлено Цитата Dmitriy78781 @ пример неизменяемого класса Тоже не понял. Может это тот, у которого все члены приватные и класс имеет только геттеры, и конструктор - через который инициализируются эти самые приватные члены класса ? Или не то? |
Сообщ.
#4
,
|
|
|
Цитата KILLER @ А что такое final? Я всегда думал что если класс имеет приватный деструктор - то от него нельзя отнаследоваться, но вот эти всякие final - херня какая то... Это из нового стандарта? Да, из нового. Там даже лучше можно struct A final { }; struct B : public A { // error }; А как с приватным деструктором жить-то? как удалять-то? С приватным конструктором еще можно понять, конструировать через статическую функцию. |
Сообщ.
#5
,
|
|
|
Цитата XandoX @ Да, из нового. Там даже лучше можно Что оно означает то хоть? Цитата XandoX @ А как с приватным деструктором жить-то? как удалять-то? А какая практическая цель от такого класса то? Я вот 5 с половиной лет на С++ программил, ниразу мне такого говна не нужно было. Зачем оно вообще? Разве что на собеседованиях или в учебных целях показать что так можно... Добавлено Цитата XandoX @ С приватным конструктором еще можно понять, конструировать через статическую функцию. С приватным конструктором оно часто кстати нужно. А вот с приватным деструктором - только на такие вопросы, что ТС задал - отвечать. Где оно реально на практике нужно? Мне аж интересно стало. |
Сообщ.
#6
,
|
|
|
Цитата XandoX @ а что такое не изменяемый класс я не понял Может имелось в виду, класс у которого все member'ы объявлены как const?? class A { public: const int m_i; const double m_d; ... }; Это ведет к тому, что все методы также тогут быть объявлены как const и не смогут менять *this. Кстати тоже самое скорее всего будет, если объявить const A a; |
Сообщ.
#7
,
|
|
|
Цитата KILLER @ Что оно означает то хоть? Ну то и значит, что от класса нельзя наследоваться. Или что это лист в иерархии типов. В случае когда final помечается виртуальный метод - что этот метод нельзя больше переопределять (кстати в 11 стандарте появился override для виртуальных методов, вот он действительно полезный). Смысл во всем этом такойже как во всех этих public, private и прочей объектно-ориентированой мишуре. Но сам я тоже ни разу такое не использовал, по этому более вразумительного примера привести не могу. |