正文

[C++]初步掌握类和对象阶段一2006-07-12 22:48:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/fengfei/16560.html

分享到:

初步掌握类和对象分三阶段来讲解:              第一阶段讲解:定义类,访问类数据成员和方法,在栈或堆上创建对象。              第二阶段讲解:类的构造函数, 析构函数。              第三阶段讲解:类的复制构造函数,赋值操作符。 之所以分为三个阶段来讲解是因为讲解的东西比较多和细,特别是第二阶段和第三阶段有很多细小的东西需要分析,不会一步概括。让你明白为什么会这样。。 口水话讲完。呵呵。 进入正题。               如果你对栈或堆没有初步的认识,可以看[C++]栈和堆原理介绍。               首先让我们来看下类是怎么定义的:                class 类名                                                                    {                           访问控制符:                                        成员变量;                          访问控制符:                                         构造函数;(可以不写)                                        成员方法;                                         析构函数;(可以不写)                    }                   定义一个类: class TestClass                                              {                                 private:                                       int x;                                 public:                                       TestClass( ){ 函数体 };          // 构造函数                                        void setX( int x ){ 函数体 };  // 成员方法                                         ~TestClass( ){ 函数体 };        //析构函数                           }                                                  访问控制有三种:private(私有), protected(保护), public(公有)..                   private:既只有类里面的成员方法可以调用,而在子类,在类外都不能调用。                  protected:既可以被类里面的成员方法调用,也可以被子类调用,不能在类外调用。                  public:可以在类里面的成员方法调用,也可以被子类和在类外被调用(一般数据成员最好不要使用此类访问控制符)。                  构造函数:用于初始化对象数据变量,函数名必须与类名相同,且无返回类型,如果不写则系统会自定义一个默认构造函数。 将在第二阶段详细介绍。                  析构函数:用于释放对象占用的堆内存空间。函数名必须为“~类名”,无返回值,如果不写则系统会自定义一个默认析构函数。  将在第二阶段详细介绍。                  成员方法定义:一般类定义只是指定了方法的原型,并没有定义函数体。通常类定义会放在一个头文件中,而方法定义则放在一个源文件中,这个源文件要通过include宏包含该头文件, 类定义如下:    // TestClass.h  头文件                                                 class TestClass                                                         {                                                                                            private:                                                                                int x;                 public:                        TestClass( );                         int getX( );                         ~TestClass( );       }             // TestClass.cpp  源文件                   #include "TestClass.h"    // 包含头文件           TestClass::TestClass( ) // 定义构造函数            {                         x = 10;    // 初始化数据            }            void TestClass::setX( int x )   // 定义方法            {                         this.x = x;            }           TestClass::~TestClass( )  // 定义析构函            {                       // 用delete来释放对象占用的堆内存空间             }                                                                                                                                                      this指针:每个成员方法的调用都会传递调用该方法的对象的一个指针,将起作为“隐藏”的第一个参数,名为this.可以使用这个指针来访问成员变量或调用成员方法。有时这个指针还有助于消除名字的歧义。如: void TestClass::setX( int x )                                           {                                                                                             x = x;    // 成员变量和函数参数名字歧义                       }                                                                                       void TestClass::setX( int x ) {            this->x = x;   // this.x 表示成员变量 }             创建类对象:有2种创建和使用对象的方法;在栈上创建和在堆上创建。             在栈上创建:             TestClass myClass;             myClass.setX( 20 );            可以像声明简单变量一样创建对象,只不过这里的变量类型是类名。myClass.setX(10)中的“.”称为“点”操作符,利用点操作符可以调用对象上的方法和共有的成员变量。            在堆上创建:            TestClass *myClass = new TestClass( );            myClass->setX( 20 );            (*myClass).setX( 20 );            delete myClass;            用new在堆上创建一个对象,可以通过“箭头”操作符(->)来调用方法或共有变量。箭头结合了2个作用,一个是解除引用“*”,一个点操作符“.”。也可以使用这2个操作符(*和.)((*myClass).setX( 20 );),但是这样做的风格不好。    在堆上创建创建的对象就必须通过调用delete来释放堆上为对象分配的内存空间(delete myClass;)。          第一阶段就讲到这里,由于个人知识有限,有什么错误的地方还请高手指出来。过几天发第二阶段讲解。。

阅读(4290) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册