我想更好地了解virtual
限定词如何在类族中传播。考虑以下代码:
struct Parent {
void func() { cout << "Parent!" << endl; }
};
struct Child : Parent {
void func() { cout << "Child!" << endl; }
};
int main() {
Parent* pc = new Child;
pc->func(); // prints "Parent!"
}
未调用Child
的{{1}}替代项,因为func()
函数不是Parent
。很简单。
在下面的示例中,我向virtual
添加了一个接口,但我不明白为什么添加该接口会限制从Parent
到Parent::func()
的调用,因为最后一个是从Child:func()
指针。
Parent
我当时认为struct Interface {
virtual void func() = 0;
};
struct Parent : Interface {
void func() { cout << "Parent!" << endl; }
};
struct Child : Parent {
void func() { cout << "Child!" << endl; }
};
int main() {
Parent* pc = new Child;
pc->func(); // prints "Child!"
}
的构建应按以下顺序进行:
new Child
的构造,声明了一个纯虚拟Interface
func()
被构造,并覆盖Parent
(我认为在这一点上,抽象构造将是“满意”和“完成”)func()
被构造,声明它是自己的Child
实现