本系列前面的内容主要记录博主学习C++面向对象部分内容的个人思考,学习资料为浙江大学翁恺老师的课程,翁老师讲得通俗易懂,十分推荐。
1 第一个C++程序
#include <iostream>
//标准库中的头文件,后缀只是系统给文件的一个标识,与其实际内容无关
using namespace std;
int main() {
int number;
cout << "Enter a decimal number:";
// 箭头怼向cout,表示输出
cin >> number;
// 箭头怼向变量,表示将内容输给变量
cout << "The number you entered is" << number << "."<<endl;
return 0;
}
2 What is Object and class?
Object = Entity (东西,存在)
Object可以是实物,也可以是一个抽象的概念,可以是可视的也可以是不可视的。在日常生活中,当我们说某个东西时,我们也就可以称它为对象。
当Object落实到编程语言中时,它表现为一个变量(variable),正如int,double那样子,但是内容可能更为丰富。
-
Object = Data + Operations
Object由数据和对数据的操作两部分组成(当然操作也可以不作用于数据),有点像当我们谈起某个人时,我们会说他整个人如何帅气,幽默等(像我这样),这是他的个人的特点属性,对应着Object中的Data。此外,我们也会说他能干些什么,比如写得一手好C++,能够进行多人运动等,这是对其能力的描述,对应着Object的操作部分。 -
Data :the properties or status
-
Operations: the funtions
数据(Data),属性(attribute)都是一个意思,具体进行划分,可以认为有两部分properies 和status。以电灯距离,电灯的额定功率,体积等这些属性是生来就有的,基本无法改变的,就是properties;但是电灯可以是打开的,也可以是关闭的,这属于它的状态status,这些是可以被改变的。
操作(Operations),函数(funtions),方法(method)也基本指同个东西。
下面写一个点对象来看看:
class Ponint3d {
public:
Point3d(float x,float y,float z);
print();
private:
float x;
float y;
float z;
};
Pint3d a(1,2,3);
a.print();
可以看到我们首先需要定义一个class,之后再从这个class定义出一个Object,我们可以说Object is a class,同时可以说Class defines Object。
想一下,我们现在需要一个苹果Object,我们并不能立刻获得一个Object,而需要首先定义一个苹果Class,这个Class也包含了Data和Operations两部分内容,但是他的Data是还没有给定值的。具体来讲,苹果的属性有色泽,含水量等,我们定义class时并没有给定色泽如何,含水量如何,只是指出了一个苹果对象应该具备这些属性。而当我们定义一个具体的对象时,我们才指定了这些属性的情况。这样子的好处是,我们定义了一个class后,可以生出Object1,Object2,从一个苹果class可以生出红色多水苹果,青色干瘪苹果等多个Object。
柏拉图阐述过一种哲学概念。他说尽管我们在生活中可以看到各种马,比如过棕色马,汗血宝马,蒙古马等,但是这些都只是表面,在“理想国”中有一匹马,它也有毛色,体型等共性特征,但是这些特征没有被指定,只是被抽象出一个个概念,而当这些特征被指定时,就衍生出了我们现实中的各种马。class是存在于“理想国”中的概念,它包含各种抽象的共享,而object是class在现实世界中的一个个特例。
- what is OOP?
OOP, Object Oriented Programming.
在C语言这种面向对象的语言中,当我们描述一件事时,我们是按顺序一件事一件事描述出整个过程。而当我们采用C++这种面向对象的语言时我们脑子中浮现的是这件事的出现的各个对象,然后这些对象会互相发消息和接收消息。
- Objects send and receive messages
这个message具体是什么呢?Object中有一些Operations,有些Operations是可以被外界使用的,或称为调用,它暴露在外界中,所以被称为接口(interface)。一个对象可以调用另一个对象的接口,同时它自己的接口也可以被其他对象调用。这个过程就是send messages 和receive messages 的过程了。
- Functions of the interface
- communication
- protection
这些接口有助于Object的互相交流,同时可以保护对象中接口的具体内容,有object调用了我的接口,但是它无法改变接口的内容;同时,我偷偷改变了接口的内容,而不影响之前某个object对它的调用,只要这种调用的形式还是一致就行。
所以我们写代码时要遵循“高内聚,低耦合”的原则,一方面要将各种类似的功能尽可能归入一个类和对象中,同时各个类和对象之间界限要十分明显,不能糅杂在一起,相互之间只能通过接口交流
这也是C++的重要特性,封装,Encapsulation。
- bundle data and methods dealing with these data together in an object
- hide the details of data and the action
- restrict only access to the publicized methods
4 OOP Characteristics
- Everything is an object.
- A program is a bunch of objects telling each other what to do by sending messages.
- Each object has its own memory made up of other objects.
- Every object has a type.
- All object of a particular type can receive the same message.