Wil*_*iam 3 c++ polymorphism inheritance
好吧,我正在编写一个游戏,其中包含一个pairent类(敌人)的向量,它将被子类(goomba,koopa,boss1)填充,我需要在调用update时调用子类.各自的更新.我设法创建了一个问题的例子.
#include <stdio.h>
class A{
public:
virtual void print(){printf("Hello from A");}
};
class B : public A{
public:
void print(){printf("Hello from B");}
};
int main(){
A ab = B();
ab.print();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
输出需要:"你好B"输出得到:"你好A"
如何让它调用B的打印功能?
Tyl*_*nry 14
多态性仅适用于指针和引用.如果分配B到的A,它变成一个A和你失去所有的B特定信息,包括方法覆盖.这称为"切片"; 在B当它被分配给一个父类的一个对象部件被"切分"关闭该对象.
在另一方面,如果你分配B*一个A*,它看起来像一个A*,但仍然是真正的指向B,所以B特定信息仍然存在,并且B的虚拟覆盖将被使用.
尝试:
int main(){
A* ab = new B();
ab->print();
delete ab;
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
这同样适用于将a指定B给A&(reference-to- A),例如
int main(){
B b;
A& ab = b;
ab.print();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)