C++之类(Class),对象(Object)以及实例(Instance)的关
⾯向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,⽽实例是根据类创建出来的⼀个个具体的“对象”。从其定义来看,对象是指⼀个能完成特定操作,具有特定属性的实体(Component);类是具有相同属性对象的集合(Group of Objects)。实例则往往被理解为⼀个对象的具体化。
C++中的类(Class)可以看做C语⾔中结构体(Struct)的升级版。结构体是⼀种构造类型,可以包含若⼲成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。
例如C语⾔结构体:
#include <stdio.h>
//定义结构体 Student
struct Student{
//结构体包含的成员变量
char *name;
int age;
float score;
};
//显⽰结构体的成员变量
void display(struct Student stu){
printf("%s的年龄是 %d,成绩是 %f\n", stu.name, stu.age, stu.score);
}
int main(){
struct Student stu1;
/
/为结构体的成员变量赋值
stu1.name = "⼩明";
stu1.age = 15;
stu1.score = 92.5;
//调⽤函数
display(stu1);
return0;
}
C++中的类也是⼀种构造类型,但是进⾏了⼀些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量也有特定的称呼,叫做“对象”。
例如C++类和对象:
#include <stdio.h>
//通过class关键字定义类
class Student{
public:
//类包含的变量
char *name;
int age;
float score;
//类包含的函数
void say(){
printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);
}
c语言struct头文件};
int main(){
//通过类来定义变量,即创建对象
class Student stu1;  //也可以省略关键字class
//为类的成员变量赋值
stu1.name = "⼩明";
stu1.age = 15;
stu1.score = 92.5f;
//调⽤类的成员函数
stu1.say();
return0;
}
上⾯两个程序运⾏结果相同。
class 和 public 都是C++中的关键字
C语⾔中的 struct 只能包含变量,⽽C++中的 class 除了可以包含变量,还可以包含函数。display() 是⽤来处理成员变量的函数,在C语⾔中,我们将它放在了 struct Student 外⾯,它和成员变量是分离的;⽽在C++中,我们将它放在了 class Student 内部,使它和成员变量聚集
在⼀起,看起来更像⼀个整体。【函数名:display 功能:显⽰输出函数⽤法:void display()】
结构体和类都可以看做⼀种由⽤户⾃⼰定义的复杂数据类型,在C语⾔中可以通过结构体名来定义变量,在C++中可以通过类名来定义变量。不同的是,通过结构体定义出来的变量还是叫变量,⽽通过类定义出来的变量有了新的名称,叫做对象(Object)。
在第⼆段代码中,我们先通过 class 关键字定义了⼀个类 Student,然后⼜通过 Student 类创建了⼀个对象 stu1。变量和函数都是类的成员,创建对象后就可以通过点号.来使⽤它们。
可以将类⽐喻成图纸,对象⽐喻成零件,图纸说明了零件的参数(成员变量)及其承担的任务(成员函数);⼀张图纸可以⽣产出多个具有相同性质的零件,不同图纸可以⽣产不同类型的零件。
类只是⼀张图纸,起到说明的作⽤,不占⽤内存空间;对象才是具体的零件,要有地⽅来存放,才会占⽤内存空间。
在C++中,通过类名就可以创建对象,即将图纸⽣产成零件,这个过程叫做类的实例化,因此也称对象是类的⼀个实例(Instance)。
有些资料也将类的成员变量称为属性(Property),将类的成员函数称为⽅法(Method)。
在C语⾔中,我们会把重复使⽤或具有某项功能的代码封装成⼀个函数,将拥有相关功能的多个函数放在⼀个源⽂件,再提供⼀个对应的头⽂件,这就是⼀个模块。使⽤模块时,引⼊对应的头⽂件就可以。
⽽在C++中,多了⼀层封装,就是类(Class)。类由⼀组相关联的函数、变量组成,你可以将⼀个类或多个类放在⼀个源⽂件,使⽤时引⼊对应的类就可以。下⾯是C和C++项⽬组织⽅式的对⽐:
图1:C语⾔中项⽬的组织⽅式
图2:C++语⾔中项⽬的组织⽅式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。