Talk is cheap, show you the code:
1.(普通的)
#include<cstdio> class B {
public:
void func() const {
puts("B!");
}
}; class C : public B {
public:
void func() const {
puts("C!");
}
}; void hehe(const B &b) {
b.func();
} int main() {
C c;
hehe(c);
return ;
}
运行结果:
(应该是发生了向上转型什么的吧)
2. 基类的函数变为虚函数:
#include<cstdio> class B {
public:
virtual void func() const {
puts("B!");
}
}; class C : public B {
public:
void func() const {
puts("C!");
}
}; void hehe(const B &b) {
b.func();
} int main() {
C c;
hehe(c);
return ;
}
运行结果:
底层的原理暂时还不懂,有空再补充。