您的位置:

C++类指针: 定位和操作对象内存

一、对象指针的定义与使用

在C++中,通过指针可以直接访问类的成员变量和成员函数。定义指针的格式一般为:

    ClassName* objPointer;

例如,下面的代码定义了一个指向Student类的对象的指针:

    class Student {
        public:
            int age;
            void printAge() {
                cout << "My age is " << age << endl;
            }
    };

    Student* stuPtr;

通过对象指针可以直接修改成员变量的值,调用成员函数等操作:

    Student stu;
    stuPtr = &stu;
    stuPtr->age = 20;
    stuPtr->printAge();

二、指向对象数组的指针

对象数组是由多个对象组成的一个数组,可以使用指针指向对象数组中的某个元素,也可以使用指向对象数组的指针操作整个数组。定义指向对象数组的指针的格式一般为:

    ClassName* objArrayPtr;

例如:

    Student stuArray[3];
    stuArray[0].age = 18;
    stuArray[1].age = 20;
    stuArray[2].age = 22;
    Student* stuArrayPtr = stuArray;
    for (int i = 0; i < 3; i++) {
        stuArrayPtr->printAge();
        stuArrayPtr++;
    }

三、动态创建对象指针

除了可以使用普通的定义方法创建对象指针外,还可以使用new运算符动态创建对象指针。创建对象指针的格式一般为:

    ClassName* objPtr = new ClassName();

例如:

    Student* stuPtr = new Student();
    stuPtr->age = 20;
    stuPtr->printAge();
    delete stuPtr;

使用完动态创建的对象指针后,要记得使用delete运算符销毁对象以释放内存。

四、指向类成员变量和成员函数的指针

C++中也可以使用指针指向类成员变量和成员函数,这样可以动态地操作对象的成员。定义成员变量指针的格式一般为:

    int ClassName::* memVarPtr;

其中,memVarPtr表示指向类成员变量的指针。

定义成员函数指针的格式一般为:

    ReturnType (ClassName::* memFuncPtr)(ArgType1 arg1, ArgType2 arg2...);

其中,memFuncPtr表示指向类成员函数的指针。

使用指向类成员变量和成员函数的指针可以对对象进行更加灵活和动态的操作。例如:

    class Person {
        public:
            int age;
            void printAge(int add) {
                cout << "My age is " << age + add << endl;
            }
    };

    int Person::* agePtr = &Person::age;
    void (Person::* printPtr)(int) = &Person::printAge;

    Person p;
    p.*agePtr = 18;
    (p.*printPtr)(2);

五、使用指针实现对象克隆

使用指针可以非常方便地实现对象克隆,即将一个对象的值复制到另一个对象中。可以先创建一个对象指针,然后使用new运算符为新对象分配内存,并将原对象的值复制到新对象中。例如:

    class Car {
        public:
            string brand;
            int price;
            Car* clone() {
                Car* newCar = new Car();
                newCar->brand = brand;
                newCar->price = price;
                return newCar;
            }
    };

    Car c1;
    c1.brand = "BMW";
    c1.price = 300000;
    Car* c2 = c1.clone();
    cout << c2->brand << " " << c2->price << endl;
    delete c2;

六、对象指针的使用注意事项

在使用对象指针时,需要注意以下几点:

  • 使用new运算符创建对象指针后,一定要记得使用delete运算符删除对象,避免内存泄漏。
  • 使用指向对象数组的指针时,要注意指针移动的大小,一般是类的大小。
  • 指向类成员变量和成员函数的指针,在使用时要注意指针的类型和使用方法。

七、总结

本文介绍了C++中类指针的使用方法,主要包括对象指针的定义与使用、指向对象数组的指针、动态创建对象指针、指向类成员变量和成员函数的指针、使用指针实现对象克隆以及对象指针的使用注意事项等方面。指针是C++的重要特性之一,熟练掌握指针的使用可以使程序更加灵活和高效。