《C++面向对象高效编程(第2版)》——1.2 理解对象模型

简介:

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第1章,第1.2节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 理解对象模型

C++面向对象高效编程(第2版)
理解面向对象编程(OOP)范式最大的困难之一,是理解类和对象的概念。要灵活运用OOP,必须充分理解这些概念。

OOP中的基本实体是类。我们继续以银行账户为例,每个BankAccount类对象都有相同的结构和行为。因此,所有的BankAccount类对象都可以使用MakeDeposit以及类中声明的其他操作(即可以通过类的任意对象使用类中的任何操作)。同时所有对象都有自己的私有数据副本(balance、account_number等)。各对象之间的差别取决于保存在私有数据中的值。例如,BankAccount类的alpha对象中,balance的值可能为500;而BankAccount类的另一个beta对象中,balance的值可能为10000,如图1-2所示。

对象是类的实例(如切好的甜饼)。类仅在程序的源代码中可见,而对象则参与到程序的运行中,它是类的活实例。对象占据内存空间,我们可以感受到对象的存在。创建类对象的过程称为实例化对象(instantiating an object)。

在面向过程编程中,我们总是讨论调用过程,总是以“调用过程X(或调用X)和调用Y”来谈论问题(这里的X和Y都指过程)。但是,在OOP中,我们说“通过某对象调用X”,而决不会说“调用X或调用Y”。假设有一个BankAccount类的对象myAccount,我们说“通过myAccount对象调用MakeDeposit过程”。换言之,过程通过对象调用。
image

图1-2

没有对象,不能简单地调用过程。我们绝不会说“调用过程”,而必须说“通过对象调用过程”。操作(例如存款)必须通过对象调用过程(即函数)才可完成,不可能直接修改他人的数据。

在面向过程编程的模型中,程序员查看数据结构时,很难明白数据结构用于完成什么工作以及如何使用,甚至不清楚数据结构代表什么。由于数据结构并不是一个智能的实体,它的目的、用法和限制都难以理解,一些用于正确使用数据结构的信息被深埋在其他函数中,而这些函数又在别处。面向对象编程不会陷入这样的困境,因为类所要完成的工作全都以公有操作的形式清楚地陈述,而且在别处也不存在独立的数据结构。事实上,客户看不见独立的数据结构,客户所能见到的是类和一组清晰定义的操作。数据结构(隐藏在类内部)以及它能执行的操作已构成一个整体。换言之,客户利用类可做之事已在类中详细地说明,客户无需到别处查找。

相关文章
|
2月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
92 11
|
3月前
|
存储 安全 编译器
【C++核心】一文理解C++面向对象(超级详细!)
这篇文章详细讲解了C++面向对象的核心概念,包括类和对象、封装、继承、多态等。
32 2
|
2月前
|
存储 编译器 C语言
【C++】初识面向对象:类与对象详解
【C++】初识面向对象:类与对象详解
|
4月前
|
编译器 C++
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
|
4月前
|
存储 安全 数据处理
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
118 1
|
4月前
|
算法 数据可视化 C++
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
|
5月前
|
存储 开发框架 Java
|
5月前
|
Java C++ iOS开发
|
6月前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
6月前
|
存储 算法 安全
面向对象程序设计C++
面向对象程序设计C++