类(Classes)
类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。
类定义的形式是:
class class_name {
permission_label_1:
member1;
permission_label_2:
member2;
…
} object_name;
// classes example
#include <iostream.h>
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void) {return (x*y);}
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
int main () {
CRectangle rect;
rect.set_values (3,4);
cout << "area: " << rect.area();
}
上面代码中新的东西是在定义函数set_values().使用的范围操作符(双冒号:: )。它是用来在一个class之外定义该class的成员。注意,我们在CRectangle class内部已经定义了函数area() 的具体操作,因为这个函数非常简单。而对函数set_values() ,在class内部只是定义了它的原型prototype,而其实现是在class之外定义的。这种在class之外定义其成员的情况必须使用范围操作符::。
// pointer to classes example
#include <iostream.h>
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);}
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle a, *b, *c;
CRectangle * d = new CRectangle[2];
b= new CRectangle;
c= &a;
a.set_values (1,2);
b->set_values (3,4);
d->set_values (5,6);
d[1].set_values (7,8);
cout << "a area: " << a.area() << endl;
cout << "*b area: " << b->area() << endl;
cout << "*c area: " << c->area() << endl;
cout << "d[0] area: " << d[0].area() << endl;
cout << "d[1] area: " << d[1].area() << endl;
return 0;
}
以下是怎样读前面例子中出现的一些指针和类操作符 (*, &, ., ->, [ ]):
- *x 读作: pointed by x (由x指向的)
- &x 读作: -address of x(x的地址)
- x.y 读作: member y of object x (对象x的成员y)
- (*x).y 读作: member y of object pointed by x(由x指向的对象的成员y)
- x->y 读作: member y of object pointed by x (同上一个等价)
- x[0] 读作: first object pointed by x(由x指向的第一个对象)
- x[1] 读作: second object pointed by x(由x指向的第二个对象)
- x[n] 读作: (n+1)th object pointed by x(由x指向的第n+1个对象)