从C到C++(上)

从C语言到C++语言,是面向过程到面向对象编程的跨越。面向对象编程的特点就是继承和动态绑定。C++通过类的派生来实现继承,通过虚拟函数支持动态绑定,虚拟函数提供了一些封装类体系实现细节的方法。

面向对象编程的关键概念

抽象(abstraction)——去除对象中不必要的细节,保留描述对象本质特征的关键字,抽象是一种设计活动。

类 —— 是一种用户自定义类型,就好像int这样的内置类型一样。类机制必须允许程序员规定它所定义的类能够进行的操作。类里面的东西任何东西被称为类的成员。概括 说,     类是由一组数据结构和定义在该结构上的一组操作的集合。

对象(object)——某个类的一个特定变量,对象也被称作类的实例

封装(encapsulation)——把类型、数据和函数组合在一起组成一个类。

继承(inheritance)——允许类从一个更简单的基类中接受数据结构和函数。派生类可获得基类的数据和操作,并可根据需要对它们进行改写,也可以在派生类中增加新的数据类型和函数。

—————————————————————————————————————————————————————————————————————————————

抽象

抽象——就是观察一群事物,并认识到它们具有一些共同的主题,只记录能表现事物特征的关键数据项。当你这样做的时候就是在进行抽象,所存储的数据类型就是抽象数据类型。抽象本身是对事物的简化。

抽象建立了一种抽象数据类型,C++使用类(class)这个特性来实现它。它提供了一种自上向下的、观察数据类型属性的方法来看待封装:把用户定义类新型中的各种数据结构和方法组合在一起。它同时也提供一种从底向上的观点看封装:把各种数据和方法组合在一起实现一种永和自定义类型。

抽象的好处:

  • 隐藏不相关的细节,把注意力集中在本质的特征上。
  • 向外部提供一个黑盒子接口。接口确定了施加在对象之上的 有效操作的集合,但不对外提供内部的实现细节。
  • 把一个复杂的系统分解成几个相互独立的模块。这样可以做到分工明确,避免组件中间不符合规则的相互作用。
  • 重用和共享代码。

—————————————————————————————————————————————————————————————————————————————

封装

当你把抽象数据类型和他们的操作捆绑在一起的时候,就是进行封装。非OOP语言没有完备的机制来实现封装。

程序设计艺术的当前状态就是面向对象语言,它们通过把用户自定义的数据结构和用户定义的能够在这些数据结构上进行操作的函数捆绑在一起实现了数据的完整性,别的函数无法访问这些内部数据。

—————————————————————————————————————————————————————————————————————————————

访问控制

访问控制说明了谁可以访问接下来声明的数据或函数。C++中访问控制如下

  • public          属于public的声明在类的外部可见,并可按需进行设置、调用和操纵。一般的原则是不要把类的数据做成public,因为让类的数据保持私有才符合面向对象的理论之一;只有类本身才可以改变自己的数据,外部函数只能调用类的成员函数,这就保证了类的数据只会以合乎规则的方式被更新。
  • protected    声明的内容只能由该类本身的函数以及从该类所派生的类的函数使用。
  • private        属于private的声明只能被该类的成员函数使用,private声明时类外部可见的,但确实不能访问的
  • friend        属于friend的函数不属于类的成员函数,但它可以像类的成员函数一样访问类的private和protected成员。friend可以是一个函数也可以是一个类.

(后两者每次只能用于一条声明)

————————————————————————————————————————————————————————————————————————————

声明

C++类的声明就是正常的额C声明,内容包括函数、类型或数据。类把他们捆绑在一起,类中的每个函数都需要一个实现,通常的做法是将它们放在类外部。

class Fruit{
    public:
        peel();
        slice();
        juice();
    private:
        int weight;
        int height;
};

当成员函数在类外部实现时,前面必须加一些特别的前缀::。“::”被称作“全局范围分解符”,跟在他前面的就是进行查找的范围。如果::前面没有标示符就表示查找范围为全局范围。

void Fruit::peel(){	std::cout<<"in peel"<<endl;} 

调用成员函数

Fruit melon, orange, banana;
main(){
	melon.slice();
	orange.juice();
	return 0;
} 

调用一个类的对象的成员函数相当于面向对象编程语言使用的“向对象发送一条信息”术语。每个成员函数都有一个this指针,它是隐式赋给函数的,它允许对象在成员函数内部引用对象本身。

—————————————————————————————————————————————————————————————————————————————

构造函数和析构函数

当类的一个对象被创建时,构造函数就会被隐式调用,它负责对象的初始化。与之相对应的,类存在一个清理函数称为析构函数。当对象被销毁(超出生存范围或进行delelte操作,回收它所使用的堆内存),析构函数就自动调用。析构函数不如构造函数常用,它里面的代码一般用于处理一些特殊的终止要求以及垃圾回收等。析构函数不仅能清除对象,还清理对象所持有的锁。

构造函数和析构函数是非常需要的,因为类外部的任何函数都不能访问类的private数据成员,因此需要类内部有个特权函数来创建一个对象并对其初始化。

时间: 2024-07-31 15:33:39

从C到C++(上)的相关文章

jq upload图片上传代码

/* * 图片上传 * */ function postImgData() { $("#addFileInfo input[name='file']").change(function () { console.log($(this).val()) if (!$(this).val()) { return } var fileTyle = $(this).val().split("."); console.log(fileTyle); if (fileTyle[1]

Uploadify/uploadifive上传(中文文档)

Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本. Uploadify/uploadifive主要特点有: 1. 多文件上传 2. 个性化设置 3. 上传进度条显示 4. 拖拽上传(HTML5版本) 官网:http://www.uploadify.com 部署 在部署一个Uploadify实例前,请确保满足最低要求: 1.jQuery 1.4.x 或更高版本 2.Flash Player 9.0.24 或更高版本 3.支持PHP, ASP

GitHub限制上传大于100M的单个大文件

工作中遇到这个问题,一些美术资源..unitypackage文件大于100M,Push到GitHub时被拒绝.意思是Push到GitHub的每个文件的大小都要求小于100M. 搜了一下,很多解决办法只是把这些超过100M的大文件从本地版本库中移除,使得Push可以成功.但这并没有解决如何上传大文件到GitHub的问题. 解决办法是使用Git LFS. 用法参考:http://blog.csdn.net/tyro_java/article/details/53440666 按照以上方法设置好后,就

使用fruitstrap实现命令行将IPA包安装到iOS设备上

Requirements Mac OS X. Tested on Snow Leopard only. You need to have a valid iPhone development certificate installed. Xcode must be installed, along with the SDK for your iOS version. Usage fruitstrap [-d] -b <app> [device_id] Optional -d flag laun

git 把本地创建的项目放到github上

很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到Github上的时候发现自己对于Git的操作是如此之愚钝,所以今天决定把Git好好学习一遍,好让自己以后能更好地使用Github,主要还是通过Git教程 - 廖雪峰的官方网站来学习.简要步骤可以直接看最后的总结. Git的安装就不说了. 第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创

如何上传代码到github?

如何上传代码到github? 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://git-for-windows.github.io/ 1.进入Github首页,点击New repository新建一个项目  2.填写相应信息后点击create即可 Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public,

微信开发之本地接口调试(非80端口,无需上传服务器服务器访问

前言: 本文是总结在开发微信接口时,为方便开发所采取的一些快捷步骤,已节省开发人员难度开发时间从而提高开发效率. 本地测试: (提醒,在本地模拟微信get或post数据时先将校验参数注释掉) 利用微信模拟器weixinPost进行模拟发送xml数据 由于这个软件是微信没公开高级接口时公布的,所以对于高级接口的调试,笔者利用的是Fiddler这个抓包工具模拟post数据 高端测试: 利用反向代理软件ngrok访问本地项目: ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之

万家报账平台没有“上传文件”按钮的解决办法

在有的电脑没有"上传文件"的按钮? 第一步:首先检查浏览器设置. 第二步:找到IE的Internet选项菜单,开启菜单栏的根据下列方面找,如下图: 第三步:找到Internet选项后,点击,选择安全选项卡,并点击"自定义级别" 第四步:找到"将文件上载到服务器时包含本地目录路径"选择"启用".然后点击确定关闭IE,重启打开. 第五步:更新浏览器的flash版本.在百度中搜索"flash player官网"即

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

C#如何拿到从http上返回JSON数据?

在实际开发中,我们经常会使用到API,所谓API一般就是一个地址,我们称之为接口.然后我们通过用C#对这地址发送请求,请求后,服务器就会给我们返回数据,一般是XML或者JSON,这里我们主要讲述的是JSON. 为了演示,我们这里准备了一个接口,这是一个查询物流的接口.(读者读到这篇文章的时候,接口可能有效,也可能失效,因为接口是网上找的,不是笔者自己写的,但是原理是一样的.) 接口:  http://www.kuaidi100.com/query?type=快递公司编码&postid=物流单号