2016-11-16 5 views
2
#include<iostream> 
using namespace std; 
class Alpha 
{ 
    int a; 
public: 
    void get_a(int x) 
    { 
     a = x; 
    } 
    int hello() 
    { 
     return a; 
    } 
}; 
class Beta : public Alpha 
{ 
    int b, c; 
public: 
    void get_b(int y) 
    { 
     b = y; 
    } 
    void add() 
    { 
     c = hello() + b; 
     cout << c << endl; // displays garbage value 
    } 
}; 
int main() 
{ 
    Alpha v1; 
    Beta v2; 
    v1.get_a(4); 
    v2.get_b(3); 
    v2.add(); 
    v2.disp(); 
    return 0; 
} 

Der Ausgang des v2.disp() zeigt Müll Wert, aber wenn ich "a" als v2.get_a statt v1.get_a initalise, zeigt es die richtige Antwort. Neu in C++ übrigens. Bitte helfen Sie. Vielen Dank.C++, Einzel Vererbung, Garbage Wert

+1

Was ist 'disp'? Ich sehe es nicht in deinem Code. –

+1

Auch deine Benennung ist ein bisschen komisch. Sie haben Funktionen namens 'get', die eigentlich nichts" bekommen ", sondern stattdessen * set * -Werte. –

+0

Es tut mir leid, disp war eigentlich eine Funktion, die den Wert der Variablen c drucken sollte. Vergessen, es hinzuzufügen, seit ich den Code bearbeitet habe. Aber warum Müll-Wert angezeigt wird, wenn ich die Variable bereits initialisiert habe a. Noch einmal vielen Dank. – user7166135

Antwort

2

Das Problem besteht darin, dass Sie zwei verschiedene Objekte haben, die nicht miteinander verwandt sind. Das Objekt v1 steht in keinem Zusammenhang mit dem Objekt v2, sie sind separate und unterschiedliche Objekte. Sie initialisieren Alpha::a mit v1.get_a(4), das Beta::a nicht initialisiert.

Eine Lösung für Ihr Problem ist ein Objekt zu verwenden:

Beta v; 
v.get_a(4); 
v.get_b(3); 
v.add(); 
v.disp(); 
+0

In Ordnung, großartig! Danke sehr, Bruder. :) – user7166135