21xrx.com
2024-11-22 08:00:56 Friday
登录
文章检索 我的文章 写文章
C++中重写和隐藏的区别。
2023-06-28 17:50:45 深夜i     --     --
C++ 重写 隐藏 区别 继承

在C++中,重写和隐藏都是继承中的重要概念。重写是指派生类中重新定义基类中的虚函数,而隐藏是指派生类中定义了与基类同名的非虚函数。本篇文章将详细讨论重写和隐藏的区别。

重写在继承中是非常重要的,它允许派生类重新定义基类中的虚函数,并且使用派生类对象调用该函数时会调用派生类中的函数。如果在定义重写函数时,使用override关键字声明,则编译器会检查该函数是否重写了父类的虚函数,以及函数签名是否正确。如果重写函数的签名与基类虚函数的签名不同,则会发生隐藏。例如:


class Base {

public:

  virtual void foo() {}

};

class Derive : public Base {

public:

  virtual void foo() {}

  void foo(int i) {} // 隐藏基类的foo函数

};

上面的代码中,派生类Derive中定义了一个名为foo的函数,该函数带有一个整型参数。这个函数隐藏了基类的虚函数foo。

隐藏是指派生类中定义了与基类同名的非虚函数。当基类和派生类当中出现函数名和参数列表都相同的两个函数时,派生类中的同名函数会隐藏基类中的同名函数。与重写不同,派生类中定义的这个函数只是一个普通函数,不具备多态性。例如:


class Base {

public:

  void foo() {}

};

class Derive : public Base {

public:

  void foo(int i) {} // 隐藏基类的foo函数

};

上面的代码中,派生类Derive中定义了一个名为foo的函数,该函数带有一个整型参数。这个函数隐藏了基类的函数foo,在派生类对象中,只能调用同名函数foo(int i)。

总之,重写和隐藏都是继承中的重要概念。重写允许派生类重新定义基类中的虚函数,并且具有多态性,而隐藏是指派生类中定义了与基类同名的非虚函数,只是普通函数,不具备多态性。熟练掌握它们之间的区别,可以更好地进行面向对象的编程。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复