C++自学第二课:对象和类的概念
既然是C++,比C语言多了最重要的概念:面向对象。
面向对象?对象是什么?Girlfriend? 我天天面向她也没学会C++。
我觉得对象就是有统一特征的一类编程目标。
打个比方说墙上有个开关,我一按,天花板上的灯亮了。
这个开关就是我要面向的对象,我要把这开关前面的样子和后面的内容设计出来,设计好之后批量生产,功能是一样的。
别人要让这个灯亮,买个开关来安上就行,不用重新再设计生产。
类似的灯泡也是对象,输入合适的电流它能亮,断掉电流就不亮,再输入再亮。
电脑的作用就是模拟现实世界,所以表达这个电路操作也是用编程模拟,设计虚拟的开关和灯泡这两个对象,再把它们的相互关系连接起来。
下面我们再举例来建立一个类来说明。
class Box
{ public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};
上面我们建立了一个名字叫Box的类,它有三个公共数据成员:长、宽、高;
这种公共数据成员用“public:”来声明,可以被别的程序引用。将来我们还会碰到与之相对应的私有和保护成员。
我们看到声明类的格式与前面学到的函数的声明有类似之处,也有大括号,但没有形参,最前面的数据类型用“class”代替了。
是的,程序把函数和类都看成是一个对象,只是内涵要看后面具体去不同地执行。
但是建立了这个类有什么用?我们要再用函数来引用它。
我们用一个计算两个立方体的体积的例子来说明:
前面两行是程序头文件,说来话长,我们先不管它。
然后是前面说过的Box类的声明,继续往下;
后面是一个名字叫main的主函数,数据类型是整数,没有形参,后面大括号包起的部分就是函数的功能。主函数都是这样的,其他功能包含在主函数内部。
Box Box1 什么意思?
前面不是声明了Box类吗,这里就算引用了,再声明一个Box1,它就是一个Box,它的种类是Box,包含Box的全部三个特性,但它是Box里特指的一个。
Box2是类似的。
还声明了变量:volumn体积,初始值为0,Double是一种数值可以很大的小数,可以容纳很大的体积数值。
下面:
Box1.Height=5.0;
把Box1的高设成5.0;
这不是声明了,因为Box1和Height都已经声明过了,这是赋值;
小数点“.”你可以直接读成“的”,因为它就表示后面的从属于前面。
volume = Box1.height * Box1.length * Box1.breadth;
体积等于Box1的高、长和宽的乘积
这也是赋值,将一个表达式赋给一个变量。
cout << "Box1 的体积:" << volume <<endl;
cout <<把后面的内容输出到屏幕; "Box1 的体积:" 双引号扩起的部分表示是字符串文本;volume是变量,因此程序就会求出它现在的值显示出来;endl结束此行并换行,让下次输出的值从下一行开始使输出易读。
return 0;返回0;
这个返回值并不显示,而是回应函数头的int整数数据类型。
最后以大括号结束。
Box2也同理。
但编程语言的思路和实际程序设计的思路还是相反的,倒过来看才能明白主干。
这个例子中,我们想要实现的目的是:输出立方体的体积,
所以最后的语句是要输出的内容;
输出内容有一个体积变量需要声明,声明它的名称、数据类型、求解方法。
求解方法引出立方体Box、长、宽、高。长、宽、高都是立方体Box的属性,因此定义一个Box类,包含这三个属性;
再分别装入两个Box的数据,就可以了。
从这个例子我们学习了建立类和对象的基本概念,不过我们还看不太出带来的效率提升,随着程序规模的扩大,它的优势才会逐渐显现。