c++的类和对象

如题所述

类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的抽象数据类型。
对象是类进行实体化后的产物,是一个实体。
在C++中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。 类是用户自己指定的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。C++标准本身并不提供现成的类的名称、结构和内容。
在C++中声明一个类的类型和声明一个结构体类型是相似的。下面是声明一个结构体类型的方法: struct Student//声明了一个名为Student的结构体类型 { int num; char name[20]; char sex; }; Student stud1,stud2;//定义了两个结构体变量stud1和stud2,它只包括数据,没有包括操作声明一个类: class Student//以class开头 { int num; char name[20]; char sex;//以上3行是数据成员 void display()//这是成员函数 { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; };//以上4行是函数中的操作语句  }; Student stud,stud1;//定义了两个对象stud和stud1 事实上,也可以用struct关键字来声明一个类。这样的类中默认所有成员的权限都是public(除非你特别写上权限),而用class声明的类中默认所有成员的权限都是private.
可以看到声明类的方法是由声明结构体类型的方法发展而来的,类就是对象的类型。实际上,类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。
不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。可以将上面类的声明改为 class Student//以class开头 { private://声明私有成员 intnum; char name[20]; char sex; public://声明公共成员 void display() { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } }; Student stud1,stud2;//定义了两个对象stud1和stud2 如果在类的定义中既不指定private,也不指定public,则系统就默认为是私有的。归纳以上对类类型的声明,可得到其一般形式如下: class 类名 { private: //私有的数据和成员函数; public: //公用的数据和成员函数; }; private和public称为成员访问限定符(member access specifier)。除了private和public之外,还有一种成员访问限定符protected(受保护的),用protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。
在声明类类型时,声明为private的成员和声明为public的成员的次序任意,既可以先出现private部分,也可以先出现public部分。
在一个类体中,关键字private和public可以分别出现多次。每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止。但是为了使程序清晰,应该养成这样的习惯: 使每一种成员访问限定符在类定义体中只出现一次。
C++ 程序多数先写public部分,把private部分放在类体的后部。这样可以使用户将注意力集中在能被外界调用的成员上,使阅读者的思路更清晰一些。
在C++程序中,经常可以看到类。为了用户方便,常用的C++编译系统往往向用户提供类库(但不属于C++语言的组成部分),内装常用的基本的类,供用户使用。不少用户也把自己或本单位经常用到的类放在一个专门的类库中,需要用时直接调用,这样就减少了程序设计的工作量。 上述程序段中,最后一行用已声明的Student类来定义对象,这种方法是很容易理解的。经过定义后,stud1和stud2就成为具有Student类特征的对象。stud1和stud2这两个对象都分别包括Student类中定义的数据和函数。
定义对象也可以有以下几种方法:
1.先声明类类型,然后再定义对象前面用的就是这种方法,如Student stud1,stud2;//Student是已经声明的类类型在C++中,声明了类类型后,定义对象有两种形式。
(1)class 类名 对象名
如: class Student stud1,stud2;
把class和Student合起来作为一个类名,用来定义对象。
(2)类名 对象名
如: Student stud1,stud2;
直接用类名定义对象。
这两种方法是等效的。第1种方法是从C语言继承下来的,第2种方法是C++的特色,显然第2种方法更为简捷方便。
2.在声明类类型的同时定义对象 class Student{//声明类类型 public://先声明公用部分 void display(){ cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } private://后声明私有部分 int num; char name[20]; char sex; }stud1,stud2;//定义了两个Student类的对象 在定义Student类的同时,定义了两个Student 类的对象。
3.不出现类名,直接定义对象 class//无类名 { private://声明以下部分为私有的 //... public://声明以下部分为公用的 //... }stud1,stud2;//定义了两个无类名的类对象直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。

温馨提示:答案为网友推荐,仅供参考
相似回答