一、类和对象的关系
每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在c++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例(instance)。
正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。
在C++中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
二、定义对象的方法
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 类的对象。
不出现类名,直接定义对象
class //无类名
{
private : //声明以下部分为私有的
┆
public : //声明以下部分为公用的
┆
}stud1,stud2;//定义了两个无类名的类对象
直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。
三.代码举例(构造对象数组并传递构造参数):
// 一个典型的类——有三个数据成员...
//
class CFooble {
protected:
int x,y,z;public:
// 两个构造函数...
CFooble(int i) { x=y=z=i; }
CFooble(int xx, int yy, int zz) : x(xx),y(yy),z(zz) { } // 一个输出函数
void print() {
printf("CFooble at %p: (%d,%d,%d)n", this, x, y, z);
} // 这个函数检查是否为空...
int IsEmpty() {
return x==0 && y==0 && z==0;
}
};#ifdef NEVER
// 如下这样将不能运行—不能“生硬”地进行C++类对象的初始化!
CFooble table[] = {
{ 1,2,3 },
{ 4,5,6 },
{ 0,0,0 }
};
#endif// 以下是如何初始化一个类数组:
CFooble table[] = {
CFooble(1,2,3),
CFooble(4,5,6),
CFooble(0), // 甚至可以是用不同的构造器!
};void main()
{
for (CFooble* pc=table; !pc->IsEmpty(); pc++) {
pc->print();
}
}