Método virtual privado y protegido de C ++

Parece que es bueno hacer que los métodos virtuales sean privados para separar las interfaces para los siguientes dos clientes: 1. clientes que crean instancias de un objeto y llaman al método 2. clientes que derivan de la clase y pueden querer anular el método. En pocas palabras, el primer cliente no necesita saber si un método es virtual. Él llamará al método no virtual público de la clase base, que a su vez llamará al método virtual privado. Ver código a continuación por ejemplo.

Ahora, en el caso de que el método virtual deba enviar un mensaje superpuesto al método virtual correspondiente a su clase base, como por ejemplo el método Guardar, que debe pasar por todos los métodos virtuales en la cadena de la herencia para guardar los datos correspondientes a cada nivel de derivación: no tenemos más remedio que usar un método virtual protegido, a menos que haya una manera de garantizar el almacenamiento de datos en todos los niveles de derivación sin usar la súper mensajería (no hay ninguna que yo sepa).

Me gustaría saber si el razonamiento anterior es correcto.

Asegúrate de usar el desplazamiento para ver el código completo.

#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;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta