我认为不用花太多时间解释,而是可以使用几行代码来解释我的问题。可以说我有2个类,一个类继承自另一个类:
#include <iostream>
class A{
public:
void parse()
{
treatLine();
};
void treatLine()
{
std::cout << "treatLine in A" << std::endl;
}
};
class B : public A{
public:
void treatLine()
{
std::cout << "treatLine in B" << std::endl;
}
};
int main()
{
B b;
b.parse();
return 0;
}
对我来说,执行时令人惊讶的是,它会打印“A中的TreatLine”。是否可以将类B中的函数TreatLine调用为B类型的对象(即,上面的代码将打印“B中的treatLine”)?并保留创建类型为A的对象的可能性,该对象将打印“A中的TreatLine”
最佳答案
将treatLine
设为虚拟:
virtual void treatLine() {
std::cout << "treatLine in A" << std::endl;
}
这样,将根据对象的运行时类型(称为“动态类型”)而不是对象的编译时类型(称为“静态类型”)来调用函数。
关于c++ - 传承和功能重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12557469/