MST
星途 面试题库

面试题:C++ 中类与结构体在成员访问权限方面的区别

在 C++ 中,类和结构体都可以包含成员变量和成员函数。请详细阐述类和结构体默认的成员访问权限分别是什么,并且说明如何改变成员的访问权限。
32.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  • 类默认的成员访问权限:类默认的成员访问权限是 private。这意味着在类内部定义的成员变量和成员函数,在类外部不能直接访问。例如:
class MyClass {
    int data; // 默认为private,外部无法直接访问
public:
    void setData(int value) {
        data = value;
    }
    int getData() {
        return data;
    }
};
  • 结构体默认的成员访问权限:结构体默认的成员访问权限是 public。这使得在结构体内部定义的成员变量和成员函数,在结构体外部可以直接访问。例如:
struct MyStruct {
    int data; // 默认为public,外部可以直接访问
    void setData(int value) {
        data = value;
    }
    int getData() {
        return data;
    }
};
  • 改变成员访问权限
    • 使用访问修饰符:在 C++ 中,可以使用 publicprivateprotected 访问修饰符来改变成员的访问权限。
      • public:使用 public 修饰的成员可以在类或结构体的外部直接访问。
      • private:使用 private 修饰的成员只能在类的内部访问,结构体中使用较少,因为结构体默认是 public
      • protected:使用 protected 修饰的成员可以在类的内部以及该类的派生类中访问,但在类外部不能直接访问。例如:
class Example {
private:
    int privateData;
protected:
    int protectedData;
public:
    int publicData;
    void setPrivateData(int value) {
        privateData = value;
    }
    int getPrivateData() {
        return privateData;
    }
};
class Derived : public Example {
public:
    void accessProtectedData() {
        // 可以访问基类的protected成员
        protectedData = 10; 
    }
};
  • 位置决定权限:在类或结构体定义中,访问修饰符对其后面直到下一个访问修饰符或定义结束之间的所有成员起作用。例如,在上面 Example 类定义中,privateDataprivate 权限,protectedDataprotected 权限,publicData 及之后的成员函数是 public 权限。