C++之类之访问控制与封装



先看下封装有什么好处:

  1.一旦数据成员被定义成private,类的作者就可以自由修改数据,只要类的接口不变(public),用户代码就无需改变。

  2.防止由于用户的原因造成数据被破坏,因为用户无法直接访问到private成员,所以当对象状态被破坏时,只有实现部分的代码采可能产生这样的错误,找bug会大大节省时间。



一、使用public和private封装:

  在使用访问说明符之前,user可以直接到达类对象的内部并且控制它的具体实现细节:我们需要使用访问说明符(access specifiers)来对类进行封装,使类的成员受到保护,想让谁看谁才能看到。

  • 用public说明符修饰的成员在整个程序内都是可以被访问的,public成员定义的是类的接口。
  • 用private说明符修饰的成员只能被类的成员函数访问,但是不能被类外的代码访问。private封装了部分实现细节。

一个类可以包含0或多个访问说明符,对于某个访问说明符能出现多少次也没有严格规定。



二、class和struct的区别:

其实这俩本来没啥区别,都是C++为了向下兼容C,唯一的区别就是:使用struct关键字定义的类,在第一个访问说明符之前的成员是public的;使用class定义的类在第一个访问说明符之前的成员是private的。



三、友元:

  类可以允许其他类或者函数访问它的非公有成员,方法是令其他class或者function成为它的友元(friend)。wow,你可以达到堂屋门哦!好感人啊,别人不行,只有friend才可以。

  友元声明只能出现在类定义的内部(仅仅指定访问权限),但是在类内出现的具体位置不限定,友元不是类的成员,也不受到它所在区域访问控制级别(public/private)的约束。(这些约束是对外来人的,你是我的friend,对你无效哦),不过一般来说,还是在类定义开始或结束前的位置集中声明友元。

  友元在类内的声明仅仅指定了访问权限,而不是一个真正的函数声明,所以我们需要在类外对函数再进行一次声明(使友元对类的用户可见)。为了使友元对类的用户可见,我们通常把对友元的声明与类本身放在同一个头文件中(类的外部)。



C++之类之访问控制与封装

原文地址:https://www.cnblogs.com/ccpang/p/11372971.html

时间: 2024-10-03 23:17:48

C++之类之访问控制与封装的相关文章

PHP 类的访问控制与封装private修饰符

<?php /* 封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的                 内部细节,以达到对成员的访问控制--切记不是拒绝访问 private (私有的):被定义为 private 的成员,允许同一个类里的所有成员访问(调用方法是用:$this->方法名), 但对于在该类外调用有private修饰的成员方法和在子类中调用都不允许的. */ header("Content-type: text/html; charset=utf-8&q

访问控制与封装

在C++语言中,我们使用访问说明符加强类的封装性: ·定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口. ·定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装(即隐藏了)类的实现细节. 作为接口的一部分,构造函数和部分成员函数紧跟在public说明符之后:而数据成员和作为实现部分的函数则跟在private说明符后面. 一个类可以包含0个或多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格限

【c++ primer, 5e】访问控制与封装

练习 7.16 无,类的接口定义在public说明符之后,类的实现细节定义在private说明符之后. 7.17 有.类成员的默认访问权限不同.class的类成员默认为private,struct的则默认为public. 通常来说,当我们希望定义的类的所有成员是public的时候就用struct. 7.18 p242 7.19 [友元] 练习 7.20 声明的类外函数需要直接引用类内的私有成员的时候要用到友元函数. 设计原因:并非所有的.与某个类相关的函数都适合声明成那个类的成员函数,例如书上的

JavaSE——(五):封装、继承、多态

目录 一.封装 1.1.为什么需要封装 1.2.封装属性 1.3.自动封装属性 1.3.1.创建单个 1.3.2.批量创建 二.继承 2.1. Java继承概要 2.2.为什么需要继承 2.3.实现继承 2.2. Java继承的特征 2.2.1.传递性 2.2.2.单根性 三.构造方法 3.1.构造方法概要 3.2.带参数的构造方法 四.多态 4.1.LSP(里氏代换原则) 4.2.重写(override) 4.3.多态实现 五.示例与视频下载 六.面试题 java面向对象的三大特性是:封装.继

Java多线程编程模式实战指南(一):Active Object模式--转载

本文由黄文海首次发布在infoq中文站上:http://www.infoq.com/cn/articles/Java-multithreaded-programming-mode-active-object-part1 .转载请注明作者: 黄文海 出处:http://viscent.iteye.com. Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心

《C++ primer 5th》笔记

p,li { white-space: pre-wrap } p,li { white-space: pre-wrap } p,li { white-space: pre-wrap } #类的this 假设有一个类A,total是A的一个对象,isbn()是A的一个成员函数,当我们使用 total.isbn()时,实际上是在替某个对象调用isbn().成员函数通过一个名为this的额外隐式函数来访问调用它的那个对象.当我们调用一个成员函数时,用请求该函数的对象地址初始化this,例如: 调用to

Effective Item - 使可访问性最小化

模块设计是否良好,有个重要的因素在于,相对外部模块是否隐藏内部数据以及实现细节. 设计良好的模块会隐藏实现细节,并将API与其实现隔离开来. 模块之间通过API进行通信,对于内部工作情况互不可见. 即,封装(encapsulation)——软件设计的基本原则之一. 为什么要封装? 通过封装可以有效地接触各个模块之间的耦合关系,使这些模块可以独立地开发.测试.优化.使用.理解和修改. 即: 可以增加开发效率,模块可以并行开发. 封装可以减轻维护的负担,可以更有效的进行优化,且不会影响其他模块的正确

C++我们必须要熟悉的事之具体做法(3)——类的设计与声明

1. 让接口被正确使用 最重要的方法是:保持与内置类型的一致性. 方法1:外覆类型(wrapper types) 例如在需要年月日时,使用 struct day { explicit day(int d) : val(d) { } private: int val; }; 方法2:函数替代对象 class month { public: static month jan() { return month(1); } … private: explicit month(int);    //禁止生

Java多线程编程模式实战指南一:Active Object模式(上)

Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它允许任务的提交(相当于对异步方法的调用)和任务的执行(相当于异步方法的真正执行)分离.这有点类似于System.gc()这个方法:客户端代码调用完gc()后,一个进行垃圾回收的任务被提交,但此时JVM并不一定进行了垃圾回收,而可能是在gc()方法调用返回后的某段时间才开始执行任务--回收垃圾.我们知