c++封装性
C++ code到运行程序
作为一个c++程序员这个应该是最应该知道的细节,简言之:编译----链接----可执行的程序。这里所说的细节主要是第一步的细节,编译器如何把c++代码编译成目标代码。概括的讲是把c++代码转化成cpu能认识的东西。这个过程十分的复杂,需要解析c++标准这个庞大的语法体系,还要支撑起面向对象中的一些特性,比如继承,多态,封装等等,这个过程也由于编译器不同而不同,虽然都是c++编译器,编译出来的代码是不同的,这就导致了一些问题。因为c++标准并没有定义编译完成之后的代码的规范。这便造成了一些技术的诞生。也可以看出c++标准是针对程序员而言的,c++标准约束程序员,编译器来解析c++标准,来实现它,然而有意思的事情是c++支持指针,这个东西可以直接访问内存,这就相当于c++提供了一个后门来破坏自己定义的语言特性。可以通过这个“后门”来直接访问内存里的东西,但是一般的状况是程序崩溃,这是因为对内存的结构不是十分清楚的缘故,如果你能了解内存的布局,就可以超越c++语言的特性,利用编译器来做自己任何想做的事情了。
理解封装
封装是实现信息隐蔽的一种技术,其目的是使类的定义和实现分离。C++的一个特性,相信很多的人自认为理解,完全的理解,至少以前的我是这么认为的,在三个特性中我认为封装性最容易理解,但是随着对面向对象的了解和认识,我对封装性有了新的认识,感觉以前的认识十分的片面。正如上面所说封装性是c++语言的特性,而语言是用来约束程序员的,以前的理解就是类像一个包,而里面有一些数据,程序员的代码不能随便访问。然而这种封装是比较片面的。
Everything has a purpose,而封装存在的理由就是重用,重用就是写的一个代码库可以在很多地方重用,而且易于扩充。在一块内存中可以被许多应用程序运用,从开发的角度这样十分的省事,不必做重复的工作,在使用的角度,十分的节约内存,以前一个程序要加载一个库,现在几个程序只需加载一个库就可以了。这就是重用,使用以前的概念是无法实现这个目的的。聪明的程序员解决了这个问题。使用com组件技术,做到了二进制级别的代码重用。相当于扩充了操作系统,因为操作系统就是一个开放的接口,供应用程序调用功能。这就需要二进制级别的封装,
而由于一样的c++代码由不同的编译器编译出来的代码不一样,造成了代码之间的兼容问题。因为你封装起来的东西给了使用不同编译器的程序员获得的代码是不一样的,这样就不具备扩充性和灵活性。不能实现代码重用。
所以c++语言级别的封装性是十分狭隘的。
各种角度看封装
用户:我只需要个能用的,能升级的产品。
客户程序员:我需要的是可扩展的,封装的,插件式的库,这个库的东西不能影响到程序框架中的其他部分
库程序员:给客户程序员一个接口和一个二进制级别的代码。以实现可扩充行和可重用性。
内存:对我而言没有封装,计算机的一个基本概念,越往底层限制的东西越少。
编译器:我编译出来的代码要具有封装性,必须处理我和同行之间的差异。
C++语言:无辜的我是用来限制程序员的。但是也可以使用我的巧妙规则开提高你的水平,来实现你所需要的重用和扩充性。
c++封装性的更多相关文章
- 【PHP面向对象(OOP)编程入门教程】9.封装性(var与public,protected,private的关系)
封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独 ...
- java封装性
原先是class Person{ public string name; public int age } public void main{ Person person=new person(); ...
- 体验Java的封装性
package com.cnblogs.java; //体验Java的封装性 /* * 如下的人类年龄赋值-300岁,显然很不合理,这种直接对类的属性赋值,有时候虽然不合理但却会编译通过. * 所以我 ...
- [改善Java代码]使用静态内部类提高封装性
建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...
- C++的封装性
C++的封装性 C++的阶段,我想根据C++的一些特有的特性分别写一些专题,每个专题我都捎带讲一些语法,当然不会很多,我还是会像C语言那样,内存结构贯穿始终,有汇编就有真相…… 本专题,我们讲述封装性 ...
- OOP 三大特点:继承性,封装性,多态性
1.继承性:代码重用 2.封装性: 使相似数据和操作进行封装,保持代码安全 3.多态性: PHP不支持多态
- java封装性、继承性及关键字
方法的参数传递(重点.难点)1.形参:方法声明时,方法小括号内的参数 实参:调用方法时,实际传入的参数的值 2.规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的:将实参的值传递 ...
- Java面向对象(封装性概论)
Java面向对象(封装性概论) 知识概要: (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...
- [ Java学习基础 ] Java的封装性与访问控制
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...
随机推荐
- Managing Hierarchical Data in MySQL
Managing Hierarchical Data in MySQL Introduction Most users at one time or another have dealt with h ...
- 注释PHP和html混合代码
<?php if(false){ ?> any code <?php } ?>
- Android Toast封装
package com.whoop.mobile.trace.util; import android.content.Context; import android.content.res.Reso ...
- OpenStack Summit Paris 会议纪要 - 11-04-2014
前言: 来源:https://wiki.openstack.org/wiki/Summit/Kilo/Etherpads#Ops 不一定翻译准.由于是在summit上随手写的. 重点关注Ops Sum ...
- Ubuntu Server安全Webserver搭建流程
之前整过CentOS.整了Ubuntu才发现,Ubuntu简单多了--不知道性能相比又怎样. 以Ubtuntu 14.04为例.记录一下搭建流程. 一.SSHserver 第一件事当然是ssh,默认安 ...
- 自定义控件(视图)2期笔记05:自定义控件之继承自View(滑动开关)
1. 开关按钮点击效果,如下: 2. 继承已有View实现自定义View 3. 下面通过一个案例实现滑动开关的案例: (1)新建一个新的Android工程,命名为" 开关按钮", ...
- 安装VS2013的离线MSDN帮助文档
作为vs的初学者,安装帮助文档有利于快速掌握.net的基本语法,对于摸索学习的同学帮助很大. VS2013和VS2012的帮助文档目前为止还是一样 下面是下载地址 http://www.micr ...
- sql server根据日期或者月份查询聚合数据
/*****************************根据时间查询每天的数据***************************************/ @tm_start:开始时间 @tm ...
- MTK Android 默认值修改笔记
1.设置菜单: 1.1位置信息(Location)默认关闭: 请将 alps\frameworks\base\packages\SettingsProvider\res\values\default. ...
- Win8节省C盘空间攻略
问题分析: 1.系统页面文件(虚拟内存)占用空间 2.自动更新的缓存文件 3.系统保护的备份文件(系统还原用的) 4.休眠文件 5.索引文件 6.桌面文件 解决办法: 1.机器是8G内存,完全不需要虚 ...