c++之——重载、重写、重定义

时间:2024-08-22 10:04:02

函数重载:

必须在同一个类中进行;

子类无法重载父类的函数,父类同名函数将被子类名称覆盖;

重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。

函数重写与重定义:

重写:

必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型;

使用virtual关键字声明之后能够产生多态(如果不使用virtual,那叫重定义);

多态是在运行期间根据具体对象的类型决定函数调用(动态联编)。

代码分析:

 #include<iostream>
using namespace std; class Parent {
public:
virtual void fuc()
{
cout << "parent 无参fuc...\n";
}
virtual void fuc(int i)
{
cout << "parent 1参fuc...\n";
}
virtual void fuc(int i,int j)
{
cout << "parent 2参fuc...\n";
} };
class Child1 : public Parent
{
public:
virtual void fuc(int i, int j)
{
cout << "child 2参fuc...\n";
}
virtual void fuc(int i, int j,int k)
{
cout << "child 3参fuc...\n";
}
}; int main()
{
Child1 c1;
c1.fuc();
return ;
}

报错如下:c++之——重载、重写、重定义

前面已经说过,子类无法重载父类函数,并且,子类同名函数会覆盖父类函数,所以,子类c1访问fuc函数,是没有参数的,编译器在child1中找到了fuc函数的名字,就不会去父类再找了,而child1类中没有提供无参数的fuc函数重载,所以报错,要想访问父类的无参fuc函数,可以加域作用符:

c1.Parent::fuc();