在 C++ 中,对类、类成员、类属性等进行(访问)权限管理。这就是封装。

public可外部访问
private不可外部访问,内部可访问
protected不可外部访问,仅子类可访问。

使用 public 修饰的类内成员皆可被内部、外部访问。
使用 private 修饰的类内成员不能被外部访问、但内部可访问。
使用 protected 的类内成员不能被外部访问、但子类可访问。

C++ 中的访问修饰符比 Java 使用更为灵活,它可以被定义在类、结构体里面。

public:(公开)

#include <iostream>
#include <string.h>
using namespace std;
class Student
{
    public:
    /*以下成员皆可被外部访问*/
    string name;
    void setName(string name){
        this->name = name;
    }
};

int main(){
    Student s1;
    s1.name = "陈杰海";
    s1.setName("陈陈菌");
    cout << s1.name << endl;
    return 0;
}

private:(私有)

#include <iostream>
#include <string.h>
using namespace std;
class Student
{
    private:
    /*以下成员皆不可被外部访问*/
    string name;
    void setName(string name){
        this->name = name;
    }
};

int main(){
    Student s1;
    /**报错**/
    s1.name = "陈杰海";
    s1.setName("陈陈菌");
    cout << s1.name << endl;
    return 0;
}

protected:(保护)

#include <iostream>
#include <string.h>
using namespace std;
class People{
    protected:
    /*以下成员仅允许被子类访问*/
    int age;
    string name;
};
class Student : People
{
    public:
    /*以下成员皆可被外部访问*/
    int score;
    void setName(string name){
        this->name = name;
    }
    string getName(){
        return this->name;
    }
};

int main(){
    Student s1;
    //不允许的访问
    //s1.name = "陈杰海";

    //允许的访问
    s1.setName("陈陈菌");
    cout << s1.getName() << endl;
    return 0;
}

运行结果:

陈陈菌

对其它成员的修饰

#include <iostream>
#include <string.h>
using namespace std;
class People{
    protected:
    /*以下成员仅允许被子类访问*/
    int age;
    string name;
};
class Student : People
{
    public:
    /*以下成员皆可被外部访问*/
    int score;
    void setName(string name){
        this->name = name;
    }
    private:
    /*以下成员皆不可被外部访问*/
    string getName(){
        int a;
        return this->name;
    }
};

int main(){
    Student s1;
    //不允许的访问
    //s1.name = "陈杰海";

    //允许的访问
    s1.setName("陈陈菌");

    //不允许的访问
    cout << s1.getName() << endl;
    return 0;
}






文章目录