Remplacer champ de membre dans les classes dérivées

J'ai un extrait de code ci-dessous:

#include <iostream>

using namespace std;

class Base {
public:
    Base() : b(0) {}
    int get();
    virtual void sayhello() { cout << "Hello from Base with b: " << b << endl; }
private:
    int b;
};

int Base::get() {sayhello(); return b;} 

class Derived : public Base {
public:
    Derived(double b_):b(b_){}
    void sayhello() { cout << "Hello from Derived with b: " << b << endl; }
private:
    double b;
};

int main() {
    Derived d(10.0);
    Base b = d;

    cout << "Derived b: " << d.get() << endl;
    cout << "Base b: " << b.get() << endl;
}

Exécuter le fichier exécutable compilé et je trouve que le résultat est hors de mon attente sur mon llvm-g++ 4.2 de la machine. La sortie sur ma boîte est comme

Hello from Derived with b: 10
Derived b: 0
Hello from Base with b: 0
Base b: 0

Ce que je veux faire dans le code pour remplacer un membre de champ (b) dans Derived classe.
Car je pense que les deux Base et Derived besoin d'accéder à ce domaine, de définir une get une fonction membre dans Base, ainsi Derived peut en hériter.
Puis-je essayer d'obtenir le champ de membre de différents objets.

Le résultat montre que je suis toujours d'origine b dans Base par d.get() plutôt que dans Derived, qui est ce que j'attendais le code pour le faire.
Rien de mal avec le code (ou ma compréhension)? Est-ce le comportement spécifié dans le cahier des charges? Quelle est la bonne façon de remplacer un membre du domaine et de définir correctement son getter et setter?

Pourquoi serait-ce le résultat de vos attentes? Vous êtes cacher B::b de D sauf s'il est qualifié. Mais le caché, initialisé B::b membre de D est copié comme il devrait être en place d'ici à la copie par défaut-ctor de B, comme il se doit. Vos classes de base n'est pas juste de commencer à l'aide de leur non-cachés de la classe dérivée des variables membres par une sorte d'osmose. Ils ne sont même pas conscients qu'ils sont là.

OriginalL'auteur Summer_More_More_Tea | 2013-10-10