自学内容网 自学内容网

C++ 访问修饰符 private、protected、public

C++ 访问修饰符 privateprotected,和public

flyfish

2009-01-19
2024-07-23 做成表格形式,可以直接拖到下面,看表格形式更清楚。

访问修饰符(Access Modifiers)是C++中用于控制类和结构体成员(包括变量和函数)访问权限的关键字。通过使用访问修饰符,程序员可以规定哪些成员可以在类的外部被访问,哪些成员只能在类的内部或其派生类中被访问。C++中有三种主要的访问修饰符:

  1. private :私有成员只能在类的内部访问,不能被类外的代码直接访问。这种访问权限用于隐藏类的实现细节,保护类的内部状态不被外部代码直接修改。

  2. protected :受保护成员在类的内部和派生类中可以访问,但不能被类外的代码直接访问。这种访问权限通常用于继承机制,允许派生类访问基类的某些成员。

  3. public :公有成员可以在任何地方访问,不受任何限制。这种访问权限用于定义类的公共接口,外部代码可以通过这些成员与类进行交互。

访问修饰符示例
#include <iostream>

class Example {
private:
    int privateVar;  // 私有成员

protected:
    int protectedVar;  // 受保护成员

public:
    int publicVar;  // 公有成员

    Example() : privateVar(1), protectedVar(2), publicVar(3) {}

    void display() {
        std::cout << "PrivateVar: " << privateVar << std::endl;
        std::cout << "ProtectedVar: " << protectedVar << std::endl;
        std::cout << "PublicVar: " << publicVar << std::endl;
    }
};

int main() {
    Example example;
    example.display();

    // example.privateVar;  // 错误,无法访问私有成员
    // example.protectedVar;  // 错误,无法访问受保护成员
    std::cout << "PublicVar: " << example.publicVar << std::endl;  // 可以访问公有成员

    return 0;
}

在上面的示例中:
privateVar 是私有成员,只能在类的内部访问。
protectedVar 是受保护成员,可以在类的内部和派生类中访问。
publicVar 是公有成员,可以在任何地方访问。

公有继承示例
#include <iostream>

class Base {
public:
    int publicVar;
protected:
    int protectedVar;
private:
    int privateVar;
};

class PublicDerived : public Base {
public:
    void display() {
        std::cout << "PublicVar: " << publicVar << std::endl;
        std::cout << "ProtectedVar: " << protectedVar << std::endl;
        // std::cout << "PrivateVar: " << privateVar << std::endl;  // 错误,无法访问私有成员
    }
};

int main() {
    PublicDerived derived;
    derived.display();
    std::cout << "PublicVar: " << derived.publicVar << std::endl;  // 可以访问公有成员
    // std::cout << "ProtectedVar: " << derived.protectedVar << std::endl;  // 错误,无法访问受保护成员

    return 0;
}

在这个示例中,PublicDerived类继承了Base类:
publicVar 作为公有成员在派生类中仍然是公有的,可以直接访问。
protectedVar 作为受保护成员在派生类中仍然是受保护的,可以在派生类内部访问。
privateVar 作为私有成员在派生类中不可访问。

友元类示例
#include <iostream>

class MyClass {
private:
    int privateVar;

public:
    MyClass() : privateVar(10) {}

    // 声明FriendClass是MyClass的友元类
    friend class FriendClass;
};

class FriendClass {
public:
    void accessPrivateVar(MyClass &obj) {
        std::cout << "Accessing privateVar: " << obj.privateVar << std::endl;
        obj.privateVar = 20;
        std::cout << "Modified privateVar: " << obj.privateVar << std::endl;
    }
};

int main() {
    MyClass obj;
    FriendClass friendObj;
    friendObj.accessPrivateVar(obj);

    return 0;
}

在这个示例中,FriendClass被声明为MyClass的友元类,因此它可以访问MyClass的私有成员privateVar。友元类的主要目的是允许特定的类访问另一个类的私有和受保护成员,通常用于需要紧密合作的类之间。

C++ 访问修饰符总结

访问修饰符类内部访问派生类访问类外部访问
private
protected
public

继承类型对访问权限的影响

公有继承(public inheritance)

基类成员在派生类中的访问级别
publicpublic
protectedprotected
private不可访问

受保护继承(protected inheritance)

基类成员在派生类中的访问级别
publicprotected
protectedprotected
private不可访问

私有继承(private inheritance)

基类成员在派生类中的访问级别
publicprivate
protectedprivate
private不可访问

友元类(Friend Classes)

友元类可以访问另一个类的私有和受保护成员。友元关系不是双向的,也不是传递的。

class MyClass {
private:
    int privateVar;
    
    // 声明FriendClass是MyClass的友元类
    friend class FriendClass;
};

class FriendClass {
public:
    void accessPrivateVar(MyClass &obj) {
        obj.privateVar = 10; // 可以访问MyClass的私有成员
    }
};

在上面的例子中,FriendClass被声明为MyClass的友元类,因此它可以访问MyClass的私有成员privateVar


原文地址:https://blog.csdn.net/flyfish1986/article/details/140639107

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!