zoukankan      html  css  js  c++  java
  • 2.3 C++类的信息隐藏机制 -- 封装

    参考:http://www.weixueyuan.net/view/6335.html

    总结:

      private、protected和public  限制类中声明的变量和函数在外部的访问权限。

      声明为protected属性的成员变量或成员函数,在类外也是不可以访问的,但是其派生类内部确实可以访问的。

    类中可以声明变量和函数,为了将类对象的内部实现与外部行为分离开来,C++语言为类提供了封装机制,与之相关的三个关键字分别是:private、protected和public,这三个关键字所代表的含义分别为私有、受保护和公用。三个关键字的作用就是限制类中声明的变量和函数在外部的访问权限。

    C++的这一机制可以使得类对象的使用者只需要关心类是如何使用的,而不需要去关心类内部的实现问题。

    访问权限需要分两部分说明:类内和类外。
    • 在类内部,无论成员变量或成员函数被声明为private、public或者protected属性,均是可以互相访问的,无访问权限限制。
    • 在类外,通过对象无法访问private和protected属性的成员变量和成员函数,而仅可以访问public属性的成员变量和成员函数。

    [例1] 定义一个 book 类来说明访问权限:
    1. #include<iostream>
    2. using namespace std;
    3. class book
    4. {
    5. public:
    6. void setprice(double a);
    7. double getprice();
    8. private:
    9. double price;
    10. };
    11. void book::setprice(double a)
    12. {
    13. price = a;
    14. }
    15. double book::getprice()
    16. {
    17. return price;
    18. }
    19. int main()
    20. {
    21. book Alice;
    22. Alice.setprice(29.9);
    23. cout<<"The price of Alice is $"<<Alice.getprice()<<endl;
    24. return 0;
    25. }
    在例 1 中,声明了一个book类,该类中有一个成员变量price,表示书本的价格属性,另外有两个成员函数,分别是用于设置价格的setprice函数和获取书本价格的getprice函数。

    类中成员变量price被设置成了private属性,而两个成员函数则设置成了public属性。声明为private属性的成员变量或函数,在类外是不可访问的,而声明为public属性的成员变量或函数,在类外可以访问。

    另外还有一个关键字protected,声明为protected属性的成员变量或成员函数,在类外也是不可以访问的,但是其派生类内部确实可以访问的,这在后面将会重新介绍,在此处,我们只需要知道protected在类外无法访问即可。

    回到例1,在主函数中,声明book的对象Alice,调用book类中的函数setprice为Alice这本书设置价格,其价格被设置为29.9元。之后再调用book类中的getprice函数,将其价格打印出来。

    在例1中,我们不能直接访问price这个成员变量,因为其属性被设置为private了,但是类中提供了两个public属性的成员函数可以供我们操作price这个变量。

    除了像例1那样声明book类以外,按照例2及例3那样声明变量也都是可以的,类内部成员变量及函数声明变量顺序可以是任意的。

    [例2] 成员变量和成员函数无声明顺序要求:
    1. class book
    2. {
    3. private:
    4. double price;
    5. public:
    6. void setprice(double a);
    7. double getprice();
    8. };

    [例3] 访问权限相同的成员也可以分开声明:
    1. class book
    2. {
    3. public:
    4. double getprice();
    5. private:
    6. double price;
    7. public:
    8. void setprice(double a);
    9. };
     
  • 相关阅读:
    Laravel 5.5 创建全局公共函数
    Mysql性能优化四:分库,分区,分表,你们如何做?
    Mysql性能优化三:主从配置,读写分离
    Mysql性能优化二:索引优化
    Mysql性能优化一:SQL语句性能优化
    Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建
    centos7使用Gogs搭建Git服务器
    CentOS虚拟机和物理机共享文件夹实现
    Flask目录
    MySQL目录
  • 原文地址:https://www.cnblogs.com/yongpan/p/7456517.html
Copyright © 2011-2022 走看看