Método virtual privado e protegido do C ++

Parece que é bom tornar os métodos virtuais privados para separar as interfaces para seguir dois clientes - 1. clientes que instanciam um objeto e chamam o método 2. clientes que derivam da classe e podem querer sobrescrever o método. Simplificando - o primeiro cliente não precisa saber se um método é virtual. Ele chamará o método público não-virtual da classe base que, por sua vez, chamará o método virtual privado. Veja o código abaixo, por exemplo.

Agora, no caso em que o método virtual precisa enviar uma super mensagem ao método virtual correspondente da classe base, como um método Save - que tem que passar por todos os métodos virtuais na cadeia de herança para salvar dados correspondentes a cada nível de derivação - não temos outra opção a não ser usar um método virtual protegido - a menos que haja uma maneira de garantir o salvamento de dados em todos os níveis de derivação sem usar super messaging (não há nenhum que eu saiba).

Eu gostaria de saber se acima do raciocínio correto.

Certifique-se de usar a rolagem para ver o código inteiro.

#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