C++一分钟之-成员访问控制:public, private, protected

本文涉及的产品
大数据开发治理平台 DataWorks,不限时长
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: 【6月更文挑战第20天】C++的成员访问控制涉及`public`、`private`和`protected`,影响类成员的可见性和可访问性。`public`成员对外公开,用于接口;`private`成员仅限类内部,保护数据安全;`protected`成员在派生类中可访问。常见问题包括不恰当的访问级别选择、继承中的访问权限误解及过度使用友元。通过示例展示了如何在派生类中访问`protected`成员。正确使用访问修饰符能确保代码的封装性、安全性和可维护性。

在C++中,成员访问控制是面向对象编程的核心概念之一,它通过publicprivateprotected这三个关键字来限定类成员的可见性和可访问性。本文旨在简明扼要地介绍这三个访问修饰符的含义、作用、常见问题、易错点及其避免策略,并通过实例代码加深理解。
image.png

访问控制基础

public(公共)

  • 含义:公开的,任何地方都能访问。
  • 用途:通常用于类的接口部分,如成员函数和需要外部直接操作的数据成员。

private(私有)

  • 含义:私有的,仅在类内部可访问。
  • 用途:隐藏实现细节,保护数据安全,实现封装。

protected(受保护)

  • 含义:介于public和private之间,基类的protected成员在派生类中可访问,但外界无法直接访问。
  • 用途:用于继承关系中,提供一种受限的访问方式,使得子类可以访问父类的某些成员,同时保持对外界的隐藏。

常见问题与避免策略

1. 不恰当的访问级别选择

  • 问题:过度使用public导致封装性差,滥用private则可能限制了类的灵活性。
  • 避免:仔细规划类的设计,确保成员的访问级别恰到好处。一般而言,数据成员应尽量设为private,成员函数根据是否需要外部调用来决定publicprotected

2. 忽视继承中的访问权限变化

  • 问题:错误地认为基类的protectedprivate成员在派生类中会变为public
  • 避免:了解并牢记继承中访问权限的规则,private成员在派生类中仍然是不可访问的,而protected成员在派生类中变为可访问。

3. 使用友元函数或友元类过度破坏封装

  • 问题:为了方便访问私有成员而随意声明友元,降低了类的封装性。
  • 避免:谨慎使用友元功能,仅在确实需要且无其他更好方案时才考虑,确保类的设计依然保持良好的封装性。

代码示例

class Base {
   
   
protected:
    int protectedVar = 5;
private:
    int privateVar = 10;
public:
    void showProtected() {
   
    std::cout << "Protected Var: " << protectedVar << std::endl; }
};

class Derived : public Base {
   
   
public:
    void accessBaseMembers() {
   
   
        // 可以访问protected成员
        std::cout << "Derived can see Protected Var: " << protectedVar << std::endl;

        // 不能直接访问private成员,即使在派生类中
        // std::cout << "Private Var: " << privateVar << std::endl; // 错误
    }
};

int main() {
   
   
    Derived derivedObj;
    derivedObj.accessBaseMembers();
    derivedObj.showProtected(); // 通过基类的public函数间接访问protected成员
    return 0;
}

小结

成员访问控制是C++面向对象编程中维护数据安全和实现封装的重要机制。正确使用publicprivateprotected关键字,能够有效地组织类的接口与实现,保证代码的健壮性和可维护性。通过以上介绍和示例,希望能帮助你更深入地理解这些访问修饰符的精髓,并在实践中避免常见的陷阱,写出更加优雅、安全的C++代码。

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
1月前
|
C++
C++程序中对象成员的引用
C++程序中对象成员的引用
28 2
|
28天前
|
存储 Serverless 数据安全/隐私保护
C++ 类的成员函数和数据成员的技术性探讨
C++ 类的成员函数和数据成员的技术性探讨
29 0
|
16天前
|
数据采集 存储 编译器
this指针如何使C++成员指针可调用
本文介绍了C++中的this指针,它是一个隐藏的指针,用于在成员函数中访问对象实例的成员。文章通过代码示例阐述了this指针的工作原理,以及如何使用指向成员变量和成员函数的指针。此外,还提供了一个多线程爬虫示例,展示this指针如何使成员指针在对象实例上调用,同时利用代理IP和多线程提升爬取效率。
this指针如何使C++成员指针可调用
|
14天前
|
编译器 C++ 存储
【C++语言】类和对象--默认成员函数 (中)
【C++语言】类和对象--默认成员函数 (中)
【C++语言】类和对象--默认成员函数 (中)
|
3天前
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
5 0
|
1月前
|
编译器 C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(上)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
16 1
|
1月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
12 1
|
1月前
|
C++
C++程序中的类成员函数
C++程序中的类成员函数
14 1
|
1月前
|
C++
C++程序中的派生类成员访问属性
C++程序中的派生类成员访问属性
26 1
|
1月前
|
Java 编译器 C语言
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(下)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
16 0

热门文章

最新文章