C++

C++ 知识量:19 - 82 - 316

15.4 访问控制><

受保护的成员- 15.4.1 -

在C++中,受保护的成员(protected member)是一种访问控制级别,它允许类的成员在类的内部、派生类和友元函数中被访问,但不能在类的实例外部直接访问。

受保护的成员对于实现类之间的封装和信息隐藏非常重要。当一个类需要将某些成员共享给派生类或友元函数时,可以使用受保护的访问控制级别。

下面是一个简单的示例,演示了如何声明和使用受保护的成员:

#include <iostream>  
  
class Base {  
public:  
    int public_member;  
  
protected:  
    int protected_member;  
};  
  
class Derived : public Base {  
public:  
    void print_members() {  
        std::cout << "Public member: " << public_member << std::endl;  
        std::cout << "Protected member: " << protected_member << std::endl;  
    }  
};  
  
int main() {  
    Derived obj;  
    obj.public_member = 10;      // 可访问  
    obj.protected_member = 20;   // 可访问,因为是派生类成员  
    obj.print_members();         // 输出成员值  
    return 0;  
}

在上面的示例中,Base类有一个受保护的成员protected_member。Derived类从Base类继承,并可以访问Base类的受保护成员。在Derived类的print_members函数中,打印了公共成员和受保护成员的值。在main函数中,创建了一个Derived类的对象,并访问了公共成员和受保护成员。

公有、私有和受保护的继承- 15.4.2 -

在C++中,公有(public)、私有(private)和受保护(protected)的继承方式,决定了基类成员在派生类中的可见性和访问性。

1. 公有继承(public inheritance):

公有继承使基类的公有成员成为派生类的公有成员。这意味着在派生类中可以直接访问基类的公有成员函数和公有变量。同时,如果派生类对基类的成员进行了重写,那么在派生类中调用该成员时,将调用派生类的成员函数。

2. 私有继承(private inheritance):

私有继承使基类的公有成员成为派生类的私有成员。这意味着在派生类中无法直接访问基类的公有成员函数和公有变量。同时,如果派生类对基类的成员进行了重写,那么在派生类中调用该成员时,将调用派生类的成员函数。

3. 受保护继承(protected inheritance):

受保护继承使基类的公有成员成为派生类的保护成员。这意味着在派生类中可以直接访问基类的公有成员函数和公有变量。同时,如果派生类对基类的成员进行了重写,那么在派生类中调用该成员时,将调用派生类的成员函数。此外,受保护的成员也可以被派生类的成员函数和友元函数访问。

注意:C++默认的继承保护级别是保护继承。如果未明确指定继承方式,则默认为保护继承。

友元与继承- 15.4.3 -

友元关系和继承关系在C++中是两种不同的概念,它们各自具有特定的用途和特点。

友元关系(Friendship)是C++中的一种特殊关系,它允许一个类访问另一个类的私有和保护成员。这种关系不具有传递性,即如果类B是类A的友元,类A不一定是类B的友元。友元关系不具有继承性,也就是说,一个类不能继承另一个类的友元关系。

继承(Inheritance)是面向对象编程中的一个重要概念,它允许基于已有的类创建新类,并添加或修改其特性。通过继承,子类可以获得父类的所有公有和保护成员。这是一种实现代码重用和类间关系的方式。

虽然友元关系和继承关系在C++中都是实现面向对象编程的重要工具,但它们的目的和使用方式是不同的。友元关系主要用于打破类的封装性,允许特定类访问其他类的私有和保护成员;而继承则是为了实现代码的重用和类的扩展性,使得子类可以继承父类的属性和行为。

总的来说,友元关系和继承关系在C++中各自扮演着不同的角色。友元关系主要用于特定类之间的交互,而继承关系则主要用于构建类的层次结构和重用代码。这两种关系虽然都是面向对象编程中的重要概念,但它们之间的关系并不复杂,也不存在直接的关联或继承关系。

继承中的类作用域- 15.4.4 -

在C++中,类的作用域指的是类定义的可见性和可访问性。类的作用域可以影响到类的成员变量和成员函数的可见性和可访问性。

在继承中,基类的作用域会影响到派生类的作用域。如果一个基类的成员在一个派生类中是可见的,那么这个基类的成员就可以在派生类中使用。

具体来说,如果一个基类的成员被声明为公有(public),那么这个基类的成员就可以在任何地方被访问。如果一个基类的成员被声明为保护(protected),那么这个基类的成员只能在同一个继承层次中的派生类中被访问,或者在基类自身和它的友元函数中被访问。如果一个基类的成员被声明为私有(private),那么这个基类的成员只能在基类自身中被访问,不能在派生类中被访问。

此外,在继承中,如果一个基类的作用域是保护或私有,那么这个基类的所有公有成员都会变成派生类的保护成员或私有成员。这意味着,如果一个基类的作用域是保护或私有,那么这个基类的所有公有成员都不能在派生类外部被访问。