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

2020-06-23  本文已影响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. 重写函数的访问修饰符可以不同
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;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读