📜  C ++ |继承|问题13(1)

📅  最后修改于: 2023-12-03 14:59:36.870000             🧑  作者: Mango

C++ | 继承 | 问题13

在C++中,继承是一种重要的机制,它允许我们从已有的类中创建新的类,并且可以使用已有类的成员变量和成员函数,从而实现代码的重用性和扩展性。

问题描述

在C++中,派生类可以继承基类的成员变量和成员函数,但是当基类中的成员是私有的时,派生类就无法直接访问它们。那么,我们如何在派生类中访问基类中的私有成员变量和成员函数呢?

解决方案

在C++中,派生类是不能直接访问基类中的私有成员变量和成员函数的。但是,我们可以通过公有成员函数或受保护的成员函数来访问基类中的私有成员变量和成员函数。

公有成员函数

如果基类中的成员函数是公有的,我们可以在派生类中通过调用具有相同签名的公有成员函数来访问基类中的私有成员变量和成员函数。具体来说,在派生类中调用基类的公有成员函数的语法形式为:

class Base {
private:
    int x;
public:
    void foo() {
        x = 10;
    }
};

class Derived : public Base {
public:
    void bar() {
        foo(); // 调用基类的成员函数来访问基类中的私有成员变量x
    }
};

在上述代码中,派生类Derived中的成员函数bar调用了基类Base中的成员函数foo来访问基类中的私有成员变量x

受保护的成员函数

如果基类中的成员函数是受保护的,我们也可以在派生类中通过调用具有相同签名的受保护的成员函数来访问基类中的私有成员变量和成员函数。具体来说,在派生类中调用基类的受保护的成员函数的语法形式为:

class Base {
private:
    int x;
protected:
    void foo() {
        x = 10;
    }
};

class Derived : public Base {
public:
    void bar() {
        foo(); // 调用基类的成员函数来访问基类中的私有成员变量x
    }
};

在上述代码中,派生类Derived中的成员函数bar调用了基类Base中的成员函数foo来访问基类中的私有成员变量x

总结

在C++中,派生类可以通过公有成员函数或受保护的成员函数来访问基类中的私有成员变量和成员函数。这种访问方式允许我们在派生类中重用和扩展基类中的代码。但是,需要注意的是,派生类应该遵守基类的访问权限规则,不应该直接访问基类中的私有成员变量和成员函数。