初步掌握类和对象分三阶段来讲解: 第一阶段讲解:定义类,访问类数据成员和方法,在栈或堆上创建对象。 第二阶段讲解:类的构造函数, 析构函数。 第三阶段讲解:类的复制构造函数,赋值操作符。 之所以分为三个阶段来讲解是因为讲解的东西比较多和细,特别是第二阶段和第三阶段有很多细小的东西需要分析,不会一步概括。让你明白为什么会这样。。 口水话讲完。呵呵。 进入正题。 如果你对栈或堆没有初步的认识,可以看[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;)。 第一阶段就讲到这里,由于个人知识有限,有什么错误的地方还请高手指出来。过几天发第二阶段讲解。。

评论