CPP学习之——定义类或对象容易犯的错误(6.7)

一 概述

类是个抽象的名词,它不是具体的某个个体,因此我们无法对它进行赋值操作。正如我们无法对int这个类型进行赋值一样,如:int=5;这样是错误的,因为int代表的是一个类型,而不是某个具体的变量

二 说明

2.1 类比说明

我们只有用这个类型定义一个具体的变量后,然后才能给这个具体的变量赋值。 如:

1
2
int a;
a=1;

第一行用int这个类型定义了一个具体的变量,第二行则将一个具体的数字赋给了这个具体的变量。

2.2 类说明

同理,我们也不能给类赋值,如:

1
Human.weight=100;

这样是错误的,因为人类是个抽象的名词,它泛指所有的人,你无法给这个抽象的名词赋值,你要做的能是用这个抽象的名词来具体化某一个人,如:

1
Human Tom;

这样就具体到了汤姆这个对象上,然后我们就可以对汤姆的体重进行赋值,如:

1
Tom.weight=100;

2.3 结论

  • 对象只能调用类中存在的成员

2.4 延伸

  • 我们在人类这个类中设置了走路、跑步、吃饭、说话的功能,那么人类的对象汤姆可以走路、跑步、吃饭、说话,但是由于我们没有加入睡觉的函数,结果造成汤姆无法睡觉
  • 假如你想要汤姆睡觉的话,那么你一定要在人类中添加睡觉这个函数,使其变成所有对象可以拥有的成员函数。

三 代码及结果

3.1 代码

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
#include<iostream>
using namespace std;

class Human
{

public:
void walk(){cout<<"我是人,我会走路! \n";}
void speak(){cout<<"我是人,我会说话! \n";}
void run(){cout<<"我是人,我会跑步! \n";}
void eat(){cout<<"我是人,我会吃饭! \n";}
void sleep(){cout<<"我是人,我会睡觉! \n";}

};
int main()
{

Human Tom;
Tom.walk();
Tom.speak();
Tom.run();
Tom.eat();
Tom.sleep();

return 0;
}

3.2 输出

1
2
3
4
5
我是人,我会走路! 
我是人,我会说话!
我是人,我会跑步!
我是人,我会吃饭!
我是人,我会睡觉!

3.3 结论

  • 要使用关键字class来声明一个类
  • 要使用类名来定义一个对象
  • 不能混淆声明和定义,声明是说明该类是什么,定义则是为一个对象分配内存
  • 要使用点运算符来访问类的成员
  • 要使用对象与点运算符访问对象的数据成员并给它们赋值
  • 不要混淆类和对象,不要给类赋值
  • 函数是用来执行一定功能的代码块,成员函数则是只能被类的对象所使用的函数;对象只能使用该类提供的函数,假如类没有提供某个函数,那么对象就不具备该函数。