美文网首页
C++中重写、重载、重定义

C++中重写、重载、重定义

作者: 潘雪雯 | 来源:发表于2020-06-23 14:50 被阅读0次

函数重载

  1. 必须在同一个类中进行
  2. 子类无法重载父类的函数
  3. 函数名字相同,参数不同,返回值可以不同
  4. 重载在编译期间根据参数类型和个数决定函数调用
    parent类中func()发生了重载
class Parent
{
public:
    Parent()
    {
        cout<<"Parent01:printf()..do"<<endl; 
    }
public:
    void abc()
    {
        printf("parent abc");
    }
    //以下两个函数的关系是重载 
    virtual void func()
    {
        cout<<"Parent01:void func()"<<endl;
    }

    virtual void func(int i)
    {
        cout<<"Parent:void func(int i)"<<endl;
    }

    virtual void func(int i, int j)
    {
        cout<<"Parent:void func(int i, int j)"<<endl;
    }
    
    virtual void func(int i, int j,int m,int n)
    {
        cout<<"Parent:void func(int i, int j,int m,int n)"<<endl;
    }
};

函数重写

  1. 发生在父类和子类之间
  2. 父类与子类中的函数必须有完全相同的原型,相同的参数,返回值也相同
  3. 重写函数的访问修饰符可以不同
  • 虚函数virtual重写,将发生多态,在运行期间根据具体对象的类型决定函数调用
  • 非虚函数重载,将发生重定义
    child类中的函数func是对类parent中函数func的重写,类parent是虚函数类型
class Parent
{
public:
    Parent()
    {
        cout<<"Parent01:printf()..do"<<endl; 
    }
public:
    void abc()
    {
        printf("parent abc");
    }
    //以下两个函数的关系是重载 
    virtual void func()
    {
        cout<<"Parent01:void func()"<<endl;
    }
    virtual void func(int i, int j)
    {
        cout<<"Parent:void func(int i, int j)"<<endl;
    }
    
};

class Child : public Parent
{

public:
    void abc()
    {
        printf("child abc");
    } 
    //此处2个参数
    void func(int i, int j)
    {
        cout<<"Child:void func(int i, int j)"<<" "<<i + j<<endl;
    }
};

相关文章

网友评论

      本文标题:C++中重写、重载、重定义

      本文链接:https://www.haomeiwen.com/subject/xoopohtx.html