温馨提示×

C++类的继承覆盖和隐藏区别

c++
小樊
83
2024-10-31 10:46:56
栏目: 编程语言

在C++中,类的继承、覆盖和隐藏是面向对象编程的重要概念

  1. 继承(Inheritance): 继承是一种创建新类的方式,新类继承了现有类的属性和方法。这样,新类可以重用现有类的代码,并可以对其进行扩展或修改。继承的主要目的是实现代码的重用和实现多态性。在C++中,使用冒号(:)和访问修饰符(public, protected, private)来表示继承关系。例如:
class Base {
public:
    void foo() {
        // ...
    }
};

class Derived : public Base {
    // ...
};
  1. 覆盖(Overriding): 覆盖是指子类重新定义了父类中的虚函数。当子类对象调用该虚函数时,将执行子类中的实现,而不是父类中的实现。覆盖的主要目的是实现多态性。在C++中,使用virtual关键字来表示虚函数,并在子类中重新定义该函数。例如:
class Base {
public:
    virtual void foo() {
        // ...
    }
};

class Derived : public Base {
public:
    void foo() override {
        // ...
    }
};
  1. 隐藏(Hiding): 隐藏是指子类中的函数与父类中的非虚函数同名,导致子类对象在调用该函数时只能访问子类中的实现,而不能访问父类中的实现。隐藏并不是多态的一种形式,因为它不能通过基类指针或引用调用子类中的实现。在C++中,如果子类中的函数与父类中的非虚函数同名,子类将隐藏父类中的函数。例如:
class Base {
public:
    void foo() {
        // ...
    }
};

class Derived : public Base {
public:
    void foo() {
        // ...
    }
};

总结一下,继承是一种创建新类的方式,允许子类重用父类的代码;覆盖是指子类重新定义了父类中的虚函数,实现多态性;隐藏是指子类中的函数与父类中的非虚函数同名,导致子类对象只能访问子类中的实现。

0