我有一个类,'Cat'和Cat类的子类'DerivedCat'。 Cat有一个函数meow(),而DerivedCat会覆盖这个函数。
在应用程序中,我声明了一个Cat对象:
Cat* cat;
稍后在应用程序中,我初始化了Cat实例:
cat = new DerivedCat();
答案 0 :(得分:2)
假设您的意思是Cat * cat;
,那取决于喵喵方法是否为虚拟方式:
DerivedCat
中的定义。Cat
中的实现。在Java中,默认情况下所有非静态方法都是虚拟的。这通常是你想要的。但是,虚方法可以在运行时添加性能开销,以确定要调用哪个实现(例如,vtable中的查找)。即使您从未创建子类,您仍可能需要为此性能开销付费。 C ++的目标之一是生成高性能代码,因此默认情况下所有方法都是非虚拟的。
答案 1 :(得分:1)