【发布时间】:2015-01-16 01:12:37
【问题描述】:
我环顾四周,大多数问题都涉及为什么要使用虚拟,什么是多态等等。我的程序有问题,我想知道WHY子函数没有被调用,以及在这种情况下如何实际CALL子函数。
我可以模拟我的问题:
#include <string>
#include <iostream>
#include <vector>
class BaseA {
public:
BaseA(const std::string &n)
: name(n)
{
}
virtual void print() const
{
std::string str("");
str += name;
std::cout << str << std::endl;
}
protected:
std::string name;
};
class BaseB : public BaseA {
public:
BaseB(const std::string &n, const std::string &v)
: BaseA(n), value(v)
{
}
void print() const
{
std::string str("");
str += name;
str += ' ';
str += value;
std::cout << str << std::endl;
}
private:
std::string value;
};
int main() {
std::vector<BaseA> vec;
vec.push_back(BaseA("cat"));
vec.push_back(BaseB("cat", "kitten"));
for(BaseA &obj : vec)
obj.print();
return 0;
}
为什么输出是:cat cat?
如何使用 BaseB::print() 将输出更改为“cat cat kitten”?
【问题讨论】:
-
嗯,我明白了。谢谢@rightføld
-
这几乎是真的@remyabel。我想在我的辩护中指出,如果您不知道该术语被创造为 SLICING,那么如果不直观地显示它,就很难发现正确的问题。
-
@Ben 这是您关闭投票时的自动评论。无意冒犯。
-
@remyabel 未采取任何措施。以后。
标签: c++ inheritance c++11 polymorphism