【发布时间】:2012-07-20 11:26:27
【问题描述】:
我有 2 个类,基类是“Port”,派生类是“VintagePort”。 据我所知,如果我使用基类的引用或指针指向派生类的对象,它会自动找到正确的方法,而不是引用或指针,而是准确地指向对象(如果方法是虚拟的)。
在我的情况下,你可以看到两个类都有友元函数“operator
std::ostream& operator<<(std::ostream& os, const Port& p)
{
os << p.brand << ", " << p.style << ", " << p.bottles << endl;
return os;
}
std::ostream& operator<<(std::ostream& os, const VintagePort& vp)
{
os << (const Port &) vp;
cout << ", " << vp.nickname << ", " << vp.year << endl;
return os;
}
VintagePort vp1;
VintagePort vp2("Gallo", "lekko brazowy", 50, "Blaze", 1990);
VintagePort vp3(vp2);
Port* arr[3];
arr[0] = &vp1;
arr[1] = &vp2;
arr[2] = &vp3;
for (int i = 0; i < 3; i++)
{
cout << ">>>>> " << i+1 << " <<<<<" << endl;
cout << *arr[i]; // call for base class instead derived class
arr[i]->Show();
}
【问题讨论】:
-
我认为程序运行正常。它正在执行函数
std::ostream& operator<<(std::ostream& os, const Port& p),因为您传递的参数确实是指向Port,而不是VintagePort,所以它调用与参数列表匹配的函数。在此示例中,继承无关紧要,因为
标签: c++ inheritance derived-class