我认为有几行代码可以更清楚地解释我的问题,而不是长篇解释。假设我有两个类,一个继承自另一个类:
#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类对象的可能性,该对象将打印“TreatLine in A”
答案 0 :(得分:1)
让treatLine
虚拟:
virtual void treatLine() {
std::cout << "treatLine in A" << std::endl;
}
这样,将根据对象的 runtime 类型调用该函数(称为“动态类型”),而不是 compiletime 类型(称为对象的“静态类型”。
答案 1 :(得分:0)
在虚拟
中创建treatLine功能