C++分为静态多态和动态多态,动态多态是子类重写父类基函数实现的。
父类指针指向子类对象
#include <iostream>
class Parent {
public:
virtual void print() {
std::cout << "Parent" << std::endl;
}
};
class Child : public Parent {
public:
void print() {
std::cout << "Child" << std::endl;
}
};
int main() {
Child c;
Parent* parentRef =&c; // 父类引用指向子类对象
parentRef->print(); // 输出 "Child"
return 0;
}
父类引用指向子类对象
#include <iostream>
class Parent {
public:
virtual void print() {
std::cout << "Parent" << std::endl;
}
};
class Child : public Parent {
public:
void print() {
std::cout << "Child" << std::endl;
}
};
int main() {
Child c;
Parent& parentRef =c; // 父类引用指向子类对象
parentRef.print(); // 输出 "Child"
return 0;
}
父类被重写的函数一定要加上virtual,不然没有办法重写,最后输出的还是Parent