📜  c++ 公共继承未得到保护 - C++ (1)

📅  最后修改于: 2023-12-03 15:13:59.257000             🧑  作者: Mango

C++ 公共继承未得到保护

在 C++ 中,公共继承是最常用的继承方式之一。然而,如果不正确地使用公共继承,可能会导致数据的不正确访问或修改,而这会致使程序出现各种问题。

公共继承的特点

公共继承是 C++ 中最简单、最基本的继承方式之一。在公共继承中,子类继承了父类的全部成员,包括公有成员、保护成员和私有成员。因此,子类可以访问父类的公有成员和保护成员,但不能直接访问父类的私有成员。

当子类访问继承自父类的成员时,它们将使用和父类相同的访问修饰符。如果父类的成员是公有的,则子类可以使用该成员。如果父类的成员是保护的,则子类可以使用该成员,但外部对象不能使用。如果父类的成员是私有的,则子类无法使用该成员。

公共继承中数据的访问保护

在 C++ 中,因为公有继承会继承父类的全部成员,包括公有成员、保护成员和私有成员,所以在使用公共继承时需要格外注意保护数据访问。此外,在公共继承中,子类可以继承任何一个父类实例的数据,如果不正确地继承了数据,可能会导致数据不正确访问或修改,而且非常难以定位和修复。

正确使用公共继承的方式是,将需要对外输出的数据和函数设置为公有成员,将需要子类使用的数据和函数设置为保护成员,将不需要对外公开的数据和函数设置为私有成员。

例如:

class Base {
public:
    int a;              // 公有成员
    void func();        // 公有成员
protected:
    int b;              // 保护成员
    void func2();       // 保护成员
private:
    int c;              // 私有成员
};

class Derived : public Base {
public:
    // 可以访问 a 和 func()
    void func3();       // 可以访问 b 和 func2()
private:
    int d;              // 子类私有成员
};
小结

C++ 中的公共继承是最常用的继承方式之一,但要注意保护数据访问。子类可以继承任意一个父类实例的数据,如果不正确地继承了数据,可能会导致数据不正确访问或修改,而且非常难以定位和修复。因此,在使用公共继承时,需要合理地设置成员的访问修饰符,以保护数据的访问。