Prywatna i chroniona metoda wirtualna C ++

Wydaje się, że dobrze jest uczynić wirtualne metody prywatnymi, aby oddzielić interfejsy dla następujących dwóch klientów - 1. klientów, którzy tworzą instancję obiektu i wywołują klientów metody 2., którzy wywodzą się z klasy i mogą chcieć nadpisać metodę. Mówiąc najprościej - pierwszy klient nie musi wiedzieć, czy metoda jest wirtualna. Wywoła publiczną nie-wirtualną metodę klasy bazowej, która z kolei wywoła prywatną metodę wirtualną. Zobacz na przykład poniższy kod.

Teraz w przypadku, gdy metoda wirtualna musi przesłać wiadomość do odpowiadającej jej metody wirtualnej klasy bazowej, takiej jak metoda zapisu - która musi przejść przez wszystkie metody wirtualne w łańcuchu dziedziczenia, aby zapisać dane odpowiadające każdemu poziomowi derywacja - nie mamy innego wyjścia, jak korzystać z chronionej metody wirtualnej - chyba że istnieje sposób zagwarantowania zapisywania danych na wszystkich poziomach wyprowadzania bez użycia super wiadomości (nie ma żadnego, co znam).

Chciałbym wiedzieć, czy powyższe rozumowanie jest prawidłowe.

Upewnij się, że używasz przewijania, aby zobaczyć cały kod.

#include <iostream>
using namespace std;

class A {

    string data;    

protected:

    virtual void SaveData()= 0;

public:

    A():data("Data of A"){}

    void Save(){
        cout << data << endl;        
        SaveData();
    }
};

class B : public A {

    string data;

protected:

    virtual void SaveData() { cout << data << endl;}

public:

    B():data("Data of B") {}

};

class C : public B {

    string data;
protected:

    virtual void SaveData() {
        B::SaveData();
        cout << data << endl;
    }

public:

    C():data("Data of C") {}
};


int main(int argc, const char * argv[])
{
    C c;
    c.Save();

    return 0;
}

questionAnswers(3)

yourAnswerToTheQuestion