C++ 访问限定符

2023-12-14 00:40:11

目录

访问修饰符概述

protected在类的内部和派生类中访问调用

private在类的内部访问和调用


访问修饰符概述

在C++中,有三个主要的访问修饰符:public、private和protected。这些修饰符用于控制类的成员(变量和函数)的访问权限。

  1. public:

    • 用public修饰的成员可以在类内部、类外部以及派生类中进行访问。
    • public成员对外部是可见的,可以直接访问。
    • 公共成员通常用于提供接口和公开的数据成员。
  2. private:

    • 用private修饰的成员只能在类内部进行访问。
    • private成员对外部是不可见的,无法直接访问。
    • 私有成员通常用于实现类的内部细节和私有数据成员。
  3. 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的成员可以在类的内部和外部被访问。在上面的示例中,publicVarpublicFunc被声明为公有成员,可以在类的内部和外部访问和调用。

  • private:私有访问限定符,被声明为private的成员只能在类的内部访问,外部无法直接访问。在上面的示例中,privateVarprivateFunc被声明为私有成员,只能在类的内部访问和调用。

  • protected:保护访问限定符,被声明为protected的成员可以在类的内部访问,同时在派生类中也可以访问。在上面的示例中,protectedVarprotectedFunc被声明为保护成员,只能在类的内部和派生类中访问和调用。

需要注意的是,访问限定符仅用于类的成员,不影响类的对象。在类的对象中,无论是公有、私有还是保护成员,都可以通过对象访问符.或指针访问符->来访问。在示例代码中,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来访问私有成员变量并输出其值。

文章来源:https://blog.csdn.net/qq_61553520/article/details/134868213
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。