Я (надеюсь) понял цель частной виртуальной функции, но я не понял, почему я должен иметь приватную виртуальную функцию ! Я имею в виду, я должен определить эту функцию во всех производных классах, но таким образом все вызовы этого виртуального чистого будут вызовом того, который определен в производном.Цель частной чистой виртуальной функции?
Предположим, мы имеем:
class Base{
public:
void foo(){ bar(); }
private:
virtual void bar() =0 {/*something*/}
};
Производный класс Base должен определить бар (или иметь его чисто виртуальный, но забывать об этом ни на минуту). Поскольку Base :: bar является закрытым, он не может использоваться производным классом. Поскольку база абстрактна, я не могу создать базовый объект, поэтому я могу вызывать foo только на производных классах, но это означает, что Base :: bar никогда не будет вызван! Конечно, я мог бы определить Foo:
void Base::foo(){
bar();
Base::bar();
}
Но для чего? Не было бы лучше определить не виртуальную частную функцию с телом бара (и заменить Base :: bar на него), и сделать тело чистого виртуального пустым?
Если да, то почему у меня должен быть бар частный (и не защищен)?
PS: Я попытался найти решение в Интернете, и я знаю, что есть сообщения, такие как ->C++: Private virtual functions vs. pure virtual functions, но они помогают в понимании частной виртуальной функции, а не частной виртуальной функции PURE. Если я ошибаюсь, простите меня!
'virtual void bar() = 0 {/ * something * /}'? – ChiefTwoPencils
Вам не нужно предоставлять определение для чистых виртуальных функций, если это то, о чем вы просите. –
@ T.C. Я думаю, вы удалили комментарий, на который я отвечал. –