学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > c++ >

第六节 类(Classes)

设置字体:
----------------------------------
类(Classes
类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。
类定义的形式是:
    class class_name {
        permission_label_1:
            member1;
        permission_label_2:
            member2;
        ...
    } object_name;
   
其中 class_name 是类的名称 (用户自定义的类型) ,而可选项object_name 是一个或几个对象(object)标识。Class的声明体中包含成员members,成员可以是数据或函数定义,同时也可以包括允许范围标志 permission labels,范围标志可以是以下三个关键字中任意一个:private:, public: 或 protected:。它们分别代表以下含义:
  • private :class的private成员,只有同一个class的其他成员或该class的“friend” class可以访问这些成员。
  • protected :class的protected成员,只有同一个class的其他成员,或该class的“friend” class,或该class的子类(derived classes) 可以访问这些成员。
  • public :class的public成员,任何可以看到这个class的地方都可以访问这些成员。
如果我们在定义一个class成员的时候没有声明其允许范围,这些成员将被默认为 private范围。
例如:
    class CRectangle {

            int x, y;
        public:
            void set_values (int,int);
            int area (void);
    } rect;
   
上面例子定义了一个class CRectangle 和该class类型的对象变量rect 。这个class 有4个成员:两个整型变量 (x 和 y) ,在private 部分 (因为private 是默认的允许范围);以及两个函数, 在 public 部分:set_values() 和 area(),这里只包含了函数的原型(prototype)。
注意class名称与对象(object)名称的不同:在上面的例子中,CRectangle 是class 名称 (即用户定义的类型名称),而rect 是一个CRectangle类型的对象名称。它们的区别就像下面例子中类型名 int和 变量名a 的区别一样:
int a;
int 是class名称 (类型名) ,而a 是对象名 object name (变量)。
在程序中,我们可以通过使用对象名后面加一点再加成员名称(同使用C structs一样),来引用对象rect 的任何public成员,就像它们只是一般的函数或变量。例如:
rect.set_value (3,4);
myarea = rect.area();
但我们不能够引用 x 或 y ,因为它们是该class的 private 成员,它们只能够在该class的其它成员中被引用。晕了吗?下面是关于class CRectangle的一个复杂的例子:
    // 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();
    }                 
                      
area: 12
上面代码中新的东西是在定义函数set_values().使用的范围操作符(双冒号:: )。它是用来在一个class之外定义该class的成员。注意,我们在CRectangle class内部已经定义了函数area() 的具体操作,因为这个函数非常简单。而对函数set_values() ,在class内部只是定义了它的原型prototype,而其实现是在class之外定义的。这种在class之外定义其成员的情况必须使用范围操作符::。
----------------------------------
课程列表
重点难点
赞助链接