MST

星途 面试题库

面试题:C++中类的访问控制修饰符及应用场景

请阐述C++中public、private和protected这三种访问控制修饰符的作用,并举例说明在实际类设计中,不同访问控制修饰符通常会用于哪些成员,以及这样设计的好处是什么。
29.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

1. 访问控制修饰符的作用

  • public:表示公有成员,类的外部和派生类都可以访问这些成员。
  • private:表示私有成员,只有类的内部成员函数可以访问,类的外部和派生类都无法访问。
  • protected:表示受保护成员,类的内部成员函数可以访问,派生类也可以访问,但类的外部无法访问。

2. 实际类设计中不同修饰符的使用成员及好处

public

  • 通常用于:提供给外部用户调用的接口函数,例如类的构造函数、析构函数、获取和设置数据成员的函数等。
  • 好处:提供了类与外部世界交互的接口,使外部代码能够方便地使用类的功能,同时隐藏类内部的实现细节,保证了类的封装性。

示例代码

class Example {
public:
    Example(int value) : data(value) {}
    int getData() const { return data; }
    void setData(int value) { data = value; }

private:
    int data;
};

在上述代码中,Example 类的构造函数、getDatasetData 函数是 public 的,外部代码可以通过这些函数创建对象、获取和设置 private 成员 data 的值。

private

  • 通常用于:类的内部数据成员和一些辅助函数,这些函数不希望被外部调用,仅用于类内部的逻辑实现。
  • 好处:将类的实现细节隐藏起来,防止外部代码直接修改数据成员,提高了数据的安全性和类的可维护性。外部代码只能通过 public 接口来间接访问和修改 private 数据,这样可以在接口函数中添加必要的逻辑判断和数据验证。

protected

  • 通常用于:在基类中,如果一些成员希望被派生类访问,但不希望被外部代码访问,就可以将这些成员声明为 protected。比如基类中一些通用的辅助函数或数据成员,派生类可能需要在重写或扩展功能时使用。
  • 好处:为派生类提供了访问基类部分成员的权限,同时避免了这些成员被外部随意访问,有助于实现代码的复用和继承体系的合理设计。

示例代码

class Base {
protected:
    int protectedData;
    void protectedFunction() {
        // 一些逻辑
    }
};

class Derived : public Base {
public:
    void useProtectedMembers() {
        protectedData = 10;
        protectedFunction();
    }
};

在上述代码中,Base 类的 protectedDataprotectedFunction 成员在 Derived 类中可以被访问和使用,而外部代码无法直接访问它们。