【发布时间】:2017-03-20 16:17:09
【问题描述】:
几天前,我想潜入 C++ 世界。我正在研究基类和派生类的概念。有人可以解释以下两个代码 sn-ps 的细微差别吗?
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;
}
输出为 30,但预期为 15
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;
}
输出为 15,但预期为 30
有人可以解释并帮助我理解其中的原因吗?我对这个概念的想法有问题,但我无法弄清楚。
【问题讨论】:
-
解释为什么你认为你的代码会给出这些值。
标签: c++ class inheritance