在C++中,可以通过对类的成员函数进行重载和覆盖来实现多态性。重载是指在一个类中可以定义多个具有相同名称但参数列表不同的成员函数,而覆盖是指派生类中的成员函数可以覆盖基类中具有相同名称和参数列表的成员函数。
重载的实现原理是通过函数的参数列表来区分不同的函数,编译器根据函数调用时提供的参数类型和个数来确定调用的是哪个函数。例如:
class A {
public:
void func(int a) {
cout << "Function with int parameter" << endl;
}
void func(double a) {
cout << "Function with double parameter" << endl;
}
};
在上面的例子中,类A中定义了两个名为func的成员函数,一个接受int类型的参数,另一个接受double类型的参数。当调用func函数时,编译器会根据提供的参数类型来确定调用哪个版本的func函数。
覆盖的实现原理是通过虚函数和动态绑定来实现的。在基类中定义虚函数,子类可以覆盖该虚函数实现自己的版本。当使用基类指针或引用调用虚函数时,实际调用的是对象的子类版本。例如:
class A {
public:
virtual void func() {
cout << "Base class function" << endl;
}
};
class B : public A {
public:
void func() override {
cout << "Derived class function" << endl;
}
};
在上面的例子中,类A中定义了一个虚函数func,类B继承了类A并覆盖了func函数。当使用基类指针或引用调用func函数时,实际会调用类B中的func函数。
总结来说,重载是在一个类中定义多个具有相同名称但参数列表不同的函数,通过参数列表的区别来选择调用哪个函数;而覆盖是在继承关系中,子类可以覆盖基类中的虚函数,实现多态性。