以前所有的课程都有一个共同点--他们都是非面向对象的。现在你已经对这些概念的一个基本的处理,我们可以进行面向对象编程(OOP),其中真正的收益!
在传统的编程中,程序基本上是向计算机的指令列表,通过定义数据(通过变量),然后使用这些数据(通过语句和函数)。数据和工作在该数据的功能是单独的实体,这些实体结合在一起,以产生所需的结果。
那么什么是面向对象的编程呢?与许多事情一样,它也许是最容易理解的,通过使用一个比喻。看看你周围-你看起来都是对象。对象有两个主要成分:1)列出相关的特性(如重量、颜色、大小、硬度、形状等),和2)的一些行为,他们可以展示(例如被打开,使东西热,等..)。这些属性和行为是不可分割的。
与传统的编程,属性(数据)和行为(功能)是独立的实体,这意味着传统的编程往往不提供一个非常直观的现实代表。它是由程序员来管理和连接的属性以适当的方式的行为。
面向对象编程(OOP)为我们提供了设计一个“对象”的能力,其属性和行为联系在一起,成为一个独立的、可重复使用的包装。这允许以一个更模块化的方式编写程序,这使得它们更容易编写和理解,同时也提供了更高程度的代码重用性。对象也提供了一个更直观的方式来与我们的数据,使我们能够定义我们如何与对象交互,以及它们如何与其他对象进行交互。注意,OOP并不取代传统的编程方法。相反,它给你额外的工具,在你的编程工具带管理的复杂性,当需要。
他产生的结果:
我有14美分。
重载运算符(+)和声明一个名为运算符+的函数一样简单,给它两个我们要添加的操作数的参数,选择一个合适的返回类型,然后编写函数。
在我们的美分对象的情况下,实施我们的运营商+()的功能是非常简单的。首先,参数类型:在这个版本的运营商+,我们要添加两个美分的对象,所以我们的功能将采取两个对象的类型美分。第二,返回类型:我们的运营商+将返回一个类型美分的结果,所以这是我们的回报类型。
最后,实施:添加两美分的对象在一起,我们真的需要添加m_cents成员从每一美分的对象。因为我们的重载操作符+()函数是类的一个朋友,我们可以直接访问我们的参数m_cents成员。同时,因为m_cents是一个整数,和C++知道如何添加整数一起使用加号,与整数运算内置的版本,我们可以简单地使用+运算符做添加。
重载减法运算符(-)也很简单:
在传统的编程中,程序基本上是向计算机的指令列表,通过定义数据(通过变量),然后使用这些数据(通过语句和函数)。数据和工作在该数据的功能是单独的实体,这些实体结合在一起,以产生所需的结果。
那么什么是面向对象的编程呢?与许多事情一样,它也许是最容易理解的,通过使用一个比喻。看看你周围-你看起来都是对象。对象有两个主要成分:1)列出相关的特性(如重量、颜色、大小、硬度、形状等),和2)的一些行为,他们可以展示(例如被打开,使东西热,等..)。这些属性和行为是不可分割的。
与传统的编程,属性(数据)和行为(功能)是独立的实体,这意味着传统的编程往往不提供一个非常直观的现实代表。它是由程序员来管理和连接的属性以适当的方式的行为。
面向对象编程(OOP)为我们提供了设计一个“对象”的能力,其属性和行为联系在一起,成为一个独立的、可重复使用的包装。这允许以一个更模块化的方式编写程序,这使得它们更容易编写和理解,同时也提供了更高程度的代码重用性。对象也提供了一个更直观的方式来与我们的数据,使我们能够定义我们如何与对象交互,以及它们如何与其他对象进行交互。注意,OOP并不取代传统的编程方法。相反,它给你额外的工具,在你的编程工具带管理的复杂性,当需要。
面向对象的编程也带来了一些其他有用的概念表:继承,封装,抽象和多态性(语言设计者有一个理念:永远不要使用一个小字,一个大的人会做的)。我们将在接下来的几章中,在即将到来的教程中覆盖所有这些概念。这是一个很大的新材料,但一旦你已经正确地了解OOP,你可能永远都不想回到传统的纯编程了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
class Cents
{
private:
int m_cents;
public:
Cents(int cents) { m_cents = cents; }
// add Cents + Cents using a friend function
friend Cents operator+(const Cents &c1, const Cents &c2);
int getCents() const { return m_cents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &c1, const Cents &c2)
{
// use the Cents constructor and operator+(int, int)
// we can access m_cents directly because this is a friend function
return Cents(c1.m_cents + c2.m_cents);
}
int main()
{
Cents cents1(6);
Cents cents2(8);
Cents centsSum = cents1 + cents2;
std::cout << "I have " << centsSum.getCents() << " cents." << std::endl;
return 0;
}
他产生的结果:
我有14美分。
重载运算符(+)和声明一个名为运算符+的函数一样简单,给它两个我们要添加的操作数的参数,选择一个合适的返回类型,然后编写函数。
在我们的美分对象的情况下,实施我们的运营商+()的功能是非常简单的。首先,参数类型:在这个版本的运营商+,我们要添加两个美分的对象,所以我们的功能将采取两个对象的类型美分。第二,返回类型:我们的运营商+将返回一个类型美分的结果,所以这是我们的回报类型。
最后,实施:添加两美分的对象在一起,我们真的需要添加m_cents成员从每一美分的对象。因为我们的重载操作符+()函数是类的一个朋友,我们可以直接访问我们的参数m_cents成员。同时,因为m_cents是一个整数,和C++知道如何添加整数一起使用加号,与整数运算内置的版本,我们可以简单地使用+运算符做添加。
重载减法运算符(-)也很简单: