文章目录

  • 1. 概述
  • 2. 详论
    • 2.1. 类与对象
    • 2.2. 数据类型
  • 3. 目录

1. 概述

现代C++与最原始的版本已经差不多是两种不同的语言了。不断发展的C++标准给C++这门语言带来了更多的范式和特性,也造就了其非常的难度。但是从个人的体会而言,如此之多的特性没有必要一项项去硬学,很多的特性没有实际使用过,体会就不会很深。反而在学了C#,Java,JavaScript这些语言并在实际使用过之后,反而愈发理解了这些语言的编程思想。

现代C++至少有4种编程范式:面向过程、面向对象、泛型和函数式。其中面向对象是最经典的编程思想,最初的时候使用C++的面向对象,总是用成了"C With Class"风格。但是其实在Cpp11之后面向对象有一整套独特的设计,体现了C++"零成本抽象(zero overhead abstraction)"的设计哲学。

2. 详论

2.1. 类与对象

任何编程语言都有数据类型的概念,如整型、浮点型等。但是很快,有时候我们发现,全部是单个的数据类型不利于管理,所以有个自定义数据类型。例如,我想定义一个图像类型:

struct ImageEx
{int imgWidth;int imgHeight;int bandCount;
};

struct最开始是C语言的定义,也就是结构体。通过这个简单的图像类型结构体,管理了图像宽、高以及波段三个参数。通过struct虽然让编程中有了一定对现实事物的抽象能力,但是这个能力是不足的。主要是缺少像函数一样的“行为”能力。而在C++中,对struct做了扩充,我们在其中加入函数来表达行为(这里通过函数DoWork()表达对图像的某种处理):

struct ImageEx
{int imgWidth;int imgHeight;int bandCount;void DoWork(){}
};

像这样,把数据(属性)和函数(方法)合成的自定义数据结构,就是类,其具体的实例就是对象,以对象最为程序设计的基本单位就是面向对象编程。它表达了对客观事物的抽象,更接近于人的自然认知。

更多的情况下,C++的类采用class关键字。class和struct的区别在于,struct定义类的数据成员和成员函数默认的访问权限是public:公有的,能被外部访问;而class则是private:私有的,不能被外部访问。当然,我们最好明确访问权限:

class ImageEx
{public:void DoWork(){}private:int imgWidth;int imgHeight;int bandCount;
};

增加访问权限控制的好处是进一步加强了类的封装性。对于任何一个类对象,用户肯定更关心其行为方法,而不是其内部属性部据。因此,通常一个比较好的实现是:方法在前,设为public,数据在后,设为private。

进一步的,如果在公有的成员函数很复杂,需要通过调用其他成员函数DoSomething()来实现,那么这个DoSomething()函数定义成公有还是私有的呢?通常来讲,可以定义成私有:

class ImageEx
{public:void DoWork(){DoSomething();}private:void DoSomething(){}int imgWidth;int imgHeight;int bandCount;
};

这样,通过数据抽象和封装,实现了接口与实现的分离。可以认为类的接口是类的公有成员函数,而类的数据成员、接口实现的函数体、类的私有成员函数是类的实现。类的设计者负责类的具体实现过程,类的用户则只需要抽象的思考类做了什么,无需了解类型的工作细节。

2.2. 数据类型

在以前经典的编程学习中,会逐渐从数据类型、表达式、语句、函数,最后才会学到类,接触面向对象的思想。而在现代以面向对象为基础的编程语言(C#、Java、JavaScript)来说:

  1. 类是抽象的自定义数据类型,只不过这个数据类型有自己的属性和方法,以及一系列表达抽象对象的特性。
  2. 语言内置的数据类型也可以认为是一种类,事物对象抽象到极致,就是基本的数据类型。

在C#/Java这样的高级编程语言中,你可以在基本类型中调用其方法;而JavaScript甚至更进一步,弱化了类型这个概念,所有的类型都是隐式的。C++具备像这样的高级抽象能力,但是也兼容C语言那种低级的基础数据类型(short、int、long、char、float、double)。这也正体现了C++的多范式编程的特点:如何看待数据类型和类,取决于你采用面向对象的编程思想还是面向过程式的编程思想。

3. 目录

  1. 面向对象编程(C++篇1)——引言
  2. 面向对象编程(C++篇2)——构造
  3. 面向对象编程(C++篇3)——析构
  4. 面向对象编程(C++篇4)——RAII

下一篇

面向对象编程(C++篇1)——引言相关推荐

  1. 面向对象编程-面试篇

    面向对象编程-面试篇 什么是面向对象思想? 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装到对象之中,让对象去实现具体功能细节. 特点: 1.将复杂的事情 ...

  2. 编写python程序、创建名为class的数据库_python面向对象编程class1

    python面向对象编程class1 #!/usr/bin/python class clz: ###name="nam330" def __init__(self): self. ...

  3. c#和python同一主机直接udp_Python 第十一章:面向对象编程(上)!(系列发布)...

    Advanced Management Technology 前沿管理技术       共享知识智慧 Python语言经典课程 Python面向对象编程 本篇内容: 1.反射 2.面向对象编程 3.面 ...

  4. 盘一盘 Python 系列特别篇 - 面向对象编程

    本文含 14123 字,53 图表截屏 建议阅读 72 分钟 0 引言 在写 Keras (下) 时,发现很多内容都要用到类 (class) 和对象 (object),因此本文作为 Python 系列 ...

  5. 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  6. 在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...

    原标题:Java新职篇:面向对象编程的3个原则是什么? 所有面向对象的编程语言都提供帮助你实现面向对象模型的机制,这些机制是封装,继承及多态性.现在让我们来看一下它们的概念. 封装 封装(Encaps ...

  7. Java面向对象编程篇6——注解与反射

    Java面向对象编程篇6--注解与反射 1.注解概述 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类.方法.变量.参数和包等都可 ...

  8. Java面向对象编程篇5——枚举

    Java面向对象编程篇5--枚举 1.枚举的概念 在日常生活中这些事物的取值只有明确的几个固定值,此时描述这些事 物的所有值都可以一一列举出来,而这个列举出来的类型就叫做枚举类型 2.枚举的定义 使用 ...

  9. Java面向对象编程篇4——内部类

    Java面向对象编程篇4--内部类 1.内部类的概念 当一个类的定义出现在另外一个类的类体中时,那么这个类叫做内部类 (Inner),而这个内部类所在的类叫做外部类(Outer). 类中的内容:成员变 ...

最新文章

  1. 2019年上半年收集到的人工智能深度学习方向干货文章
  2. 工作思路 + 邮件问题
  3. python中json.dump() 和 json.dumps() 有那些区别?
  4. 程序直接控制I/O方式
  5. 关于eclipse的实用技巧
  6. while(true) 循环中使用了sleep休眠了半小时就中断了_线程中断不是你想中断就能的...
  7. python程序运行原理_谈谈 Python 程序的运行原理
  8. win8信息服务器不可用怎么办,win8系统下开机提示OneDrive选项此服务现在不可用请稍后再试怎么办...
  9. docker compose入门
  10. SQL笛卡尔积查询的典型应用
  11. WebLogic安装说明
  12. 威纶触摸屏485通信控制多台台达变频器程序
  13. 青春有多9,我爱我所有
  14. 什么是Promise
  15. ROCKCHIP UART开发指南
  16. VIOS查看网卡对应的插槽
  17. Matlab(将2维图片显示成3维图形)
  18. 回头再说--英雄 汪峰
  19. Win7 64 位 Vcode Python安装与环境配置
  20. 管不住嘴、挪不动腿?

热门文章

  1. 初学JAVA,使用Eclipse的快捷键(非常实用哦)
  2. mysql 整型时间戳_整型unix时间戳
  3. http://blog.csdn.net/zhou452840622/article/details/41820301
  4. Starr Insurance Companies任命Haoming Zhou博士为Starr China总经理兼总裁
  5. http://codepen.io/zhou-yg/pen/NqgPmg 在线编辑器
  6. 经典视频超分论文总结2
  7. 如何培养孩子的阅读习惯?家长可以这样做!
  8. 铁甲雄心机器人冠军_中英美三国机器人争霸!《铁甲雄心》冠军花落谁家?
  9. label for标签的作用
  10. java 系统的一些基础知识