C++中使用关键字 private 实现数据抽象

C++中使用关键字 private 实现数据抽象

除了让您能够将类设计容器, 以封装数据以及操作数据的方法外, C++还让您能够使用关键字 private 指定哪些信息不能从外部访问(即在类外不可用)。另外,可将方法声明为公有的( public),以便从外部通过这些方法访问私有信息。因此,类的实现可对外(其他类和函数)隐藏它们无需知道的成员信息。
回到 Human 类,其中的 age 是一个私有成员。您知道,在现实世界中,很多人不想公开自己的真实年龄。要 Human 类向外指出的年龄比实际年龄小两岁很容易,只需在公有方法 GetAge() 中将 age 减 2,再返回结果,如以下示例程序所示:

#include <iostream>
using namespace std;

class Human
{
    private:
    // Private member data:
    int age;

    public:
    void SetAge(int inputAge)
    {
        age = inputAge;
    }

    // Human lies about his / her age (if over 30)
    int GetAge()
    {
        if (age > 30)
            return (age - 2);
        else 
            return age;
    }
};

int main()
{
    Human firstMan;
    firstMan.SetAge(35);

    Human firstWoman;
    firstWoman.SetAge(22);

    cout << "Age of firstMan " << firstMan.GetAge() << endl;
    cout << "Age of firstWoman " << firstWoman.GetAge() << endl;

    return 0;
}

输出:

Age of firstMan 33
Age of firstWoman 22

分析:
请注意第 16 行的公有方法 Human::GetAge()。由于实际年龄存储在私有成员 Human::age 中,而该成员不能从外部直接访问,因此外部用户要获悉 Human 对象的 age 属性,唯一的途径是通过方法 GetAge()。也就是说,对外隐藏了存储在 Human::age 中的实际年龄。实际上,Human 向外提供的年龄是假的:对于年龄大于 30 的人,GetAge() 返回的年龄都比实际年龄小,如第 18~21 行所示。
在面向对象编程语言中,抽象是一个非常重要的概念,让程序员能够决定哪些属性只能让类及其成员知道,类外的任何人都不能访问(友元除外)。

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

推荐一个零声学院的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、付费专栏及课程。

余额充值