- -
广义上的类和对象
举例说明:
三个名词:哺乳纲、人类、小明(一个人的名字)
当只有人类和小明这两个名词时,它们的关系是这样的:
小明属于人类。
人类是抽象出来的一个概念,是一个“虚”的东西,而小明这个人是确确实实存在的。小明是人类的一个具象的体现。小明身上有的(属性)、小明能够做的(方法),在“人类”这个类里都找得到。
当三个名词都有的时候,它们的关系是这样的:
小明属于人类,人类又属于哺乳纲
同样的,哺乳纲也是一个抽象出来的概念,哺乳纲是中不止“人类”这一个子类。所以,凡是人类中能够找到的属性与方法,在哺乳纲中都能找得到,人类中找不到的属性与方法,在哺乳纲中可能可以找到。而小明是人类的一个具象,同时也是哺乳纲的一个具象。
大概是这样的:
小结:
我认为,广义上的类与对象就是包含与被包含的关系。对象所拥有的属性与方法都是类中的一部分。而且,类所拥有的属性与方法一般会大于对象所拥有的属性与方法。
狭义上的类与对象(编程上的类与对象)
C++中,用一个class来代表一个类,方法用函数代替,属性用变量来代替。
在程序中,类与对象应该怎么写?
比如我们要写一个dog类,如果从广义上的对象来说,一只狗的属性很多:比如毛色、肩高、品种等等,那么我们在写程序的时候是否都要写上去呢?未必。
在程序中,当要写一个dog类时,我们没必要把全部的属性都写上去,而是要根据我们的需求来定:
比如,我们要写的dog类,它是一只宠物狗,那么我们要关注的属性就是品种、毛色、肩高等;如果它是一只肉够,那么毛色这个属性对我们就没啥用了,我们主要关注的属性应该就是重量、狗场的位置等。
这也是C++的第一种能力:抽象能力(抽象类)
第二种能力:组织能力(工具类)
将一系列相同的东西写到一个类里,这就成为了工具类,比如string类。
如:
Class MyString
{
MyString();
~MyString();
private:
//属性
char *str;
int len;
public:
//方法
int GetStrLen(char* str);
}解析:
(1)C++中使用class定义一个类,后面跟的是类名;
(2)class中,有访问权限:
private 私有,在上述代码中的private以下,public之上的部分都属于私有部分(即以权限访问控制符private和public为界限),私有部分中的内容,只有在内部才能访问,在外部是无法被调用的。这就使得我们的变量变得更加的安全。
public 公有,上述代码中的方法以及最开始的两个函数(构造函数和析构函数)都是属于公有的,可以在外部(比如main函数中)进行调用。
protect注意:类是虚的,不占用空间;对象是实的,会占用空间。