Vor ein paar Tagen wollte ich in die C++ Welt eintauchen. Ich studiere die Grundlagen- und abgeleiteten Klassenkonzepte. Könnte jemand die Nuance mit den folgenden zwei Codeschnipsel erklären?Basis und abgeleitete Klassen C++
class A
{
private:
virtual int GetValue() { return 10; }
public:
int Calculate() { return GetValue()*1.5; }
};
class B: public A
{
private:
virtual int GetValue() { return 20; }
};
int main()
{
B b;
std::cout << b.Calculate() << std::endl;
return 0;
}
Der Ausgang ist 30, aber 15 wurde
erwartet
class A
{
private:
int m_data;
public:
A(): m_data(GetValue()) {}
int Calculate() { return m_data*1.5; }
virtual int GetValue() { return 10; }
};
class B: public A
{
public:
virtual int GetValue() { return 20; }
};
int main()
{
B b; A* ap;
ap=&b;
std::cout << ap->Calculate() << std::endl;
return 0;
}
Der Ausgang 15 ist aber 30 wurde
erwartetKann jemand erklären und mir helfen, die Gründe zu verstehen? Etwas stimmt nicht mit meinen Gedanken zu diesem Konzept, aber ich kann es nicht herausfinden.
Erklären Sie, warum Sie dachten, dass Ihr Code diese Werte liefern würde. –