首先,请你拿出一张白纸,在最上面画一个方框,写上所有你能想到的人的特点(好的坏的奇葩的都要)
然后,在方框下边画两条斜杠,左边写上你爸爸的一些特点,右边写上你妈妈的一些特点
你会发现,在下边两个方框中,总会有一些上面方框里边的特点:
为什么呢?很简单,他们都属于人,而爸爸妈妈属于人的分支(包括你)
然而你也会发现:有些是你在上面没有写出来但是爸爸妈妈却有的,这也很好解释,虽然他们都是人,但是他们有各自的特点
好了,放下你的纸和笔,我们开始讲正事
如果让你用结构体来表示你的爸爸妈妈以及人的特点,你会如何表示?
struct 人{
勤劳();
懒惰();
爱抽烟();
//还有很多
}
struct 爸爸{
懒惰();
大手大脚();
爱抽烟();
爱管闲事();
没钱();
聪明();
};
那你妈妈呢?
struct 妈妈{
勤劳();
唠叨();
聪明();
会赚钱();
无所不能();
}
既然他们都“人”这个特性中的一部分,我们可不可以只用一个结构体,而表达出更多的人的特点?可以
struct 人{
勤劳();
懒惰();
爱抽烟();
//还有很多
}人们[200000];
but,你会发现数组的大小是有限制的,而且并不是所有人都有所有的特征
这个时候,class就排上了用场
网上说:定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。
我说:定义一个类就是定义了巧克力模型,你往里边放巧克力浆,冷冻后就有巧克力吃
类可以在只定义一个基础,而派生出(你可以理解为分支出)很多有各自特色,但是又没有离开基础的类,而一个类中可能有函数,可能有变量,我们统称为这个类的方法,方法决定了这个类可以干啥
比如生物是个类,而生物派生出了植物动物和微生物,植物又有很多种,动物也有很多种,微生物也有很多种,虽然他们都有“生物”的特点,但是他们还有自己的特点。在这里,生物处于父类,而植物动物微生物是生物的子类,而对于奇花异草来说,植物又是他们的父类(可以理解成树种子节点和父节点)
好了,接下来我们将以“盒子”作为父类,如何实现定义一个类:
class Box{
public:
int len;
int weidth;
int high;
};
public关键字说明了len,weidth,high这些变量是可以访问、修改的
那我们尝试去“修改”一下这三个变量
#include <iostream>
using namespace std;
class Box{
public:
int len;
int weidth;
int high;
};
int main(){
Box box1;
box1.len 1;
box1.weidth = 2;
box1.high = 3;
cout << "box1.len = "<<box1.len<<"\nbox1.weidth =" << box1.weidth << "\nbox1.high=" << box1.high;
}
你是不是实现了?
其实到目前为止,class和struct的用法是基本相似的
如果我想写函数咋办?
class Box{
public:
int len;
int weidth;
int high;
int v(){
return len*weidth*high;
}
};
你可以这么写,还可以在类的外部定义函数(当出现继承时你就会发现这种方法的好处)
class Box{
public:
int len;
int weidth;
int high;
int v();
};
int Box::v(){
return len*weidth*high;
}
怎么调用?很简单:
box1.v();