C++ 访问限定符
目录
访问修饰符概述
在C++中,有三个主要的访问修饰符:public、private和protected。这些修饰符用于控制类的成员(变量和函数)的访问权限。
-  public: - 用public修饰的成员可以在类内部、类外部以及派生类中进行访问。
- public成员对外部是可见的,可以直接访问。
- 公共成员通常用于提供接口和公开的数据成员。
 
-  private: - 用private修饰的成员只能在类内部进行访问。
- private成员对外部是不可见的,无法直接访问。
- 私有成员通常用于实现类的内部细节和私有数据成员。
 
-  protected: - 用protected修饰的成员可以在类内部以及派生类中进行访问。
- protected成员对外部是不可见的,无法直接访问。
- 保护成员主要用于派生类继承和访问基类的成员。
 
这些访问修饰符的使用可以帮助我们控制类的接口和实现的可见性,从而实现封装性和继承性的概念。
class MyClass {
public:
    int publicVar;    // 公有成员变量
    void publicFunc() {    // 公有成员函数
        // 函数体
    }
private:
    int privateVar;    // 私有成员变量
    void privateFunc() {    // 私有成员函数
        // 函数体
    }
protected:
    int protectedVar;    // 保护成员变量
    void protectedFunc() {    // 保护成员函数
        // 函数体
    }
};
int main() {
    MyClass obj;
    obj.publicVar = 10;    // 可以访问公有成员变量
    obj.publicFunc();    // 可以调用公有成员函数
    // obj.privateVar = 20;    // 错误,无法访问私有成员变量
    // obj.privateFunc();    // 错误,无法调用私有成员函数
    // obj.protectedVar = 30;    // 错误,无法访问保护成员变量
    // obj.protectedFunc();    // 错误,无法调用保护成员函数
    return 0;
}
-  public:公有访问限定符,被声明为public的成员可以在类的内部和外部被访问。在上面的示例中,publicVar和publicFunc被声明为公有成员,可以在类的内部和外部访问和调用。
-  private:私有访问限定符,被声明为private的成员只能在类的内部访问,外部无法直接访问。在上面的示例中,privateVar和privateFunc被声明为私有成员,只能在类的内部访问和调用。
-  protected:保护访问限定符,被声明为protected的成员可以在类的内部访问,同时在派生类中也可以访问。在上面的示例中,protectedVar和protectedFunc被声明为保护成员,只能在类的内部和派生类中访问和调用。
需要注意的是,访问限定符仅用于类的成员,不影响类的对象。在类的对象中,无论是公有、私有还是保护成员,都可以通过对象访问符.或指针访问符->来访问。在示例代码中,obj.publicVar可以访问公有成员变量,obj.publicFunc()可以调用公有成员函数。但是,私有和保护成员在对象外部是无法直接访问的。
protected在类的内部和派生类中访问调用
当成员被声明为protected时,它们可以在类的内部和派生类中进行访问和调用。下面是一个使用protected访问限定符的示例代码:
#include <iostream>
class Base {
protected:
    int protectedVar;
public:
    void setProtectedVar(int value) {
        protectedVar = value;
    }
};
class Derived : public Base {
public:
    void accessProtectedVar() {
        protectedVar = 10;  // 在派生类中可以直接访问和修改基类的protected成员变量
    }
    void accessBaseMember() {
        setProtectedVar(20);  // 在派生类中可以调用基类的公有成员函数来间接访问和修改protected成员变量
    }
};
int main() {
    Derived d;
    d.accessProtectedVar();    // 在派生类对象中访问protected成员变量
    d.accessBaseMember();    // 在派生类对象中访问和修改protected成员变量
    return 0;
}
在上述代码中,Base类中的protectedVar被声明为protected,表示它可以在类的内部和派生类中进行访问。Derived类继承自Base类,并能够访问和修改基类的protectedVar成员变量。
在Derived类中的accessProtectedVar函数中,可以直接使用protectedVar来访问和修改基类的protected成员变量。
在accessBaseMember函数中,通过调用基类的公有成员函数setProtectedVar来间接访问和修改基类的protected成员变量。
通过在派生类中访问和修改基类的protected成员,可以实现对基类成员的扩展和定制。
private在类的内部访问和调用
当成员被声明为private时,它们只能在类的内部进行访问和调用,无法在类的外部或派生类中直接访问。下面是一个使用private访问限定符的示例代码:
#include <iostream>
class MyClass {
private:
    int privateVar;
public:
    void setPrivateVar(int value) {
        privateVar = value;
    }
    void accessPrivateVar() {
        std::cout << "Accessing privateVar: " << privateVar << std::endl;
    }
};
int main() {
    MyClass obj;
    obj.setPrivateVar(10);  // 在类的内部调用公有成员函数来修改私有成员变量
    obj.accessPrivateVar();  // 在类的内部调用公有成员函数来访问私有成员变量
    // obj.privateVar = 20;   // 错误,无法在类的外部直接访问私有成员变量
    return 0;
}
在上述代码中,MyClass类中的privateVar被声明为private,表示它只能在类的内部进行访问。在MyClass类中,我们定义了setPrivateVar函数来间接修改私有成员变量,以及accessPrivateVar函数来访问私有成员变量。
在main函数中,我们创建了MyClass类的对象obj,并通过调用公有成员函数setPrivateVar来修改私有成员变量privateVar的值。然后,通过调用公有成员函数accessPrivateVar来访问私有成员变量并输出其值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!