C++中关键字 public 和 private

本文解释了C++中public和private关键字的作用,如何区分公开的数据(如性别)和私密数据(如收入),以及如何通过公有方法控制类属性的访问。通过示例说明了私有成员的访问限制及其优点,强调了封装的重要性。
摘要由CSDN通过智能技术生成

C++中关键字 public 和 private

信息至少可以分两类:不介意别人知道的数据和保密的数据。对大多数人来说,性别就是一项不介意别人知道的信息,但收入可能属于隐私。
C++让您能够将类属性和方法声明为公有的,这意味着有了对象后就可获取它们;也可将其声明为私有的, 这意味着只能在类的内部(或其友元)中访问。 作为类的设计者, 您可使用 C++关键字 public 和 private 来指定哪些部分可从外部(如 main( ))访问,哪些部分不能。
对程序员来说,能够将属性或方法声明为私有的( private)有何优点呢?请看下述 Human 类的声明(忽略除成员属性 age 外的其他代码):

class Human
{
    private:
    // Private member data:
    int age;
    string name;
    public:
    int GetAge()
    {
        return age;
    }
    void SetAge(int humansAge)
    {
        age = humansAge;
    }
    // ...Other members and declarations
};

假设有一个名为 eve 的 Human 实例:

Human eve;

如果试图使用下述代码访问成员 age:

cout << eve.age; // compile error

将出现类似于这样的编译错误:“错误: Human::age—不能访问 Human 类声明的私有成员”。要访问 age,唯一的途径就是通过 Human 类的公有方法 GetAge(),这个方法以编写 Human 类的程序员认为的合适方式暴露 age:

cout << eve.GetAge(); // OK

如果编写 Human 类的程序员愿意,可以让 GetAge() 显示的年龄比 Eve 的实际年龄小!换句话说,这意味着 C++允许类决定要暴露哪些属性以及如何暴露。如果 Human 类没有公有成员方法 GetAge(),就可确保用户根本无从查询 age。在本章后面将介绍的情形下,这种功能很有用。
同样,也不能直接给 Human::age 赋值:

eve.age = 22; // compile error

要设置年龄,唯一的途径是通过 SetAge()

eve.SetAge(22); // OK

这有很多优点。当前,SetAge() 的实现只是直接设置成员变量 Human::age,但也可在 SetAge() 中验证外部输入,避免 age 被设置为零或负数:

class Human
{
private:
    int age;
public:
    void SetAge(int humansAge)
    {
        if (humansAge > 0)
            age = humansAge;
    }
};

总之, C++让类的设计者能够控制类属性的访问和操纵方式。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值