Kilka dni temu chciałem zanurkować w świecie C++. Studiuję podstawowe i pochodne koncepcje klas. Czy ktoś mógłby wytłumaczyć niuanse z następującymi dwoma fragmentami kodu?Podstawowe i pochodne klasy 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;
}
Wyjście jest 30, ale 15 oczekiwano
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;
}
Wyjście jest 15, ale 30 oczekiwano
Może ktoś wyjaśnić i pomóc mi zrozumieć rozumowanie? Coś jest nie tak z moim myśleniem o tej koncepcji, ale nie jestem w stanie tego rozgryźć.
Wyjaśnij, dlaczego myślałeś, że twój kod poda te wartości. –