类(class)可以看成是结构体(struct)的延伸,即除了包含数据,还有函数(或者称作方法)。
对象(object)是类(class)的一个实例。从变量的角度可以理解成,类(class)是一种数据类型,而对象(object)是变量。
类使用关键字 class 来声明,具有如下的形式:
class class_name {
access_specifier_1:
member1;
access_specifier_2:
member2;
...
} object_names;
这里,标识符(identifier)class_name是类名,object_names是对象列表,member?是成员变量,可以是数据或者函数的声明,access_specifier是访问控制符。
访问控制主要分为下面3种,private,protected,public:
l private——同一个类的其他成员或者friend类才可以访问;
l protected——同一个类的其他成员或者friend类或者子类才可以访问;
l public——任何类都可以访问。
默认情况下的访问控制是private。
class CRectangle { int x, y; public: void set_values (int,int); int area (void); } rect; |
这里定义了一个类 CRectangle 和它的一个对象 rect ,还有4个成员:两个 int 类型的(x,y),访问控制默认为 private ,和两个函数 set_values(),area() (这里只是声明,并没有实现)。访问成员的方式为:对象名.成员名(注意成员名前面的点)
例如在上面的声明中:
rect.set_values (3,4); myarea = rect.area(); |
其中x,y变量因为访问控制为private,所以只能通过内部成员访问,例如:set_values(),area() 。
一个完整的例子如下:
// classes example #include <iostream> using namespace std; class CRectangle { int x, y; public: void set_values (int,int); int area () {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(); return 0; } | area: 12 |
其中void CRectangle::set_values (int a, int b) 中的::用于在类的外面定义类的成员,即这个函数set_values(int a,int b))是属于某某类(CRectangle)的。
从上面的例子中可以看到函数area()是在类的内部实现的,而函数set_values(int a,int b)是在类的外部实现的。他们的唯一的区别就是前者在编译的时候被当成内联函数(inline)处理,而后者则是一个正常的函数。
可以同时声明一个类的多个对象,这些对象在内存中占有不同的存储空间,互不影响。例如:
// example: on #include <iostream> using namespace std; class CRectangle { int x, y; public: void set_values (int,int); int area () {return (x*y);} }; void CRectangle::set_values (int a, int b) { x = a; y = b; } int main () { CRectangle rect, rectb; rect.set_values (3,4); rectb.set_values (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; return 0; } | rect area: 12 rectb area: 30 |
这个例子中调用不同对象rect和rectb的set_values(int a,int b)方法和area()方法,产生了不同的输出。
评论