21xrx.com
2024-12-27 13:23:25 Friday
登录
文章检索 我的文章 写文章
C++中的隐藏和覆盖特性解析
2023-07-02 14:58:52 深夜i     --     --
C++ 隐藏 覆盖 特性 解析

在C++中,有两个让程序员容易混淆的特性:隐藏和覆盖。这两个特性都跟类的继承有关,下面我们对它们进行解析。

在C++中,当一个子类继承了一个父类的成员函数时,如果在子类中定义了一个同名的成员函数,那么父类的成员函数就会被隐藏起来,这就是隐藏特性。

例如,在下面这个例子中,子类B继承了父类A的成员函数hello(),并且定义了一个同名的成员函数hello():


class A {

public:

  void hello() cout << "Hello

};

class B : public A {

public:

  void hello() I am B!" << endl;

};

在这个例子中,当我们通过子类B的对象来调用hello()函数时,实际上调用的是子类B中定义的hello()函数,而不是父类A中定义的hello()函数。这就是隐藏特性的表现。

另一方面,如果我们希望在子类B中覆盖父类A的成员函数,可以使用覆盖特性。

在下面这个例子中,我们通过在子类B中使用关键字“override”来覆盖父类A中的hello()函数:


class A {

public:

  virtual void hello() cout << "Hello

};

class B : public A {

public:

  virtual void hello() override cout << "Hello

};

在这个例子中,我们在父类A的hello()函数前加上了关键字“virtual”,表示这是一个虚函数。同时,在子类B中也使用了关键字“virtual”和“override”,表示子类B中的hello()函数将覆盖父类A中的hello()函数。

当我们通过子类B的对象来调用hello()函数时,实际上调用的是子类B中覆盖后的hello()函数,而不是父类A中的hello()函数。

总结一下,隐藏和覆盖都是类继承的特性,隐藏是在子类中定义了一个同名的成员函数,导致父类中相同名称的函数无法被访问;覆盖是在子类中使用“virtual”和“override”来覆盖父类中的函数。在实际编程中,我们需要根据具体的需求来使用这两个特性。

  
  

评论区

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