C++面向对象--第三章对象指针和对象数组

本文详细介绍了C++中的对象指针概念,包括其在继承、派生中的应用,如何使用对象指针访问对象成员,以及对象数组的定义和操作。此外,还重点讲解了this指针的使用场景,如解决同名形参和成员变量的问题,以及在类成员函数中返回对象本身的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象指针

对象指针的定义

注意:在继承与派生中,还会涉及到基类指针指向子类对象

对象指针的使用

例:

class MyClass {
public:
   void myFunction() {
      cout << "Hello World!" << endl;
   }
};

int main() {
   MyClass* ptr = new MyClass(); // 创建一个MyClass对象并将其地址存储在ptr中
   ptr->myFunction();            // 访问MyClass对象的成员函数
   delete ptr;                   // 释放动态分配的内存
   return 0;
}

指向对象成员的指针

例:

class MyClass {
public:
   int myVariable;
   void myFunction() {
      cout << "Hello World!" << endl;
   }
};

int main() {
   MyClass obj;
   int MyClass::* ptr1 = &MyClass::myVariable; // 指向成员变量的指针
   void (MyClass::* ptr2)() = &MyClass::myFunction; // 指向成员函数的指针
   obj.*ptr1 = 123;   // 访问对象成员变量并赋值
   (obj.*ptr2)();     // 调用对象成员函数
   return 0;
}

对象数组

对象数组的定义

类名 数组名[下标] 

        

注意:当初始化时要初始化两个(及以上)的元素时,要使用类名(参数)

例:

class MyClass {
public:
   void myFunction() {
      cout << "Hello World!" << endl;
   }
};

int main() {
   MyClass* arr = new MyClass[5]; // 创建一个包含5个MyClass对象的数组
   for (int i = 0; i < 5; ++i) {
      arr[i].myFunction();        // 访问MyClass对象数组的成员函数
   }
   delete[] arr;                  // 释放动态分配的内存
   return 0;
}

对象数组和对象指针

例:用对象指针访问对象数组

class MyClass {
public:
   void myFunction() {
      cout << "Hello World!" << endl;
   }
};

int main() {
   MyClass* arr = new MyClass[5]; // 创建一个包含5个MyClass对象的数组
   MyClass* ptr = arr;            // 使用对象指针指向数组的第一个元素
   for (int i = 0; i < 5; ++i) {
      ptr->myFunction();           // 通过对象指针访问对象数组的成员函数
      ++ptr;                       // 指针递增,指向下一个对象
   }
   delete[] arr;                  // 释放动态分配的内存
   return 0;
}

自引用this指针

存在于成员函数内部,始终指向当前被调用的成员函数操作的对象

注意:静态成员函数内部没有this指针,静态成员函数不能操作非静态成员变量(静态成员函数是属于类函数内部没有this指针)

例:

class Person

{

public:

        Person(int a= 0,string s= "张三"):age(a),name(s){};

        void show();

private:

        int age;

        string name;

};



void Person::show()

{

        cout << "age="<<this->age << endl;//10

        cout << "name=" <<this->name << endl;//小明

}



int main()

{

        Person p(10,"小明");

        p.show();

        return 0;

}

this指针的使用场景

1.当形参和成员变量同名时,可用this指针来区分

class MyClass {
public:
    void setMyValue(int myValue) {
        this->myValue = myValue;
    }
private:
    int myValue;
};

int main() {
    MyClass obj;
    obj.setMyValue(123); //调用setMyValue函数
    return 0;
}

2.在类的普通成员函数中返回对象本身(重要)

一般是返回引用。

class MyCout
{
public:
    MyCout& myCout(char *str){
        cout<<str;
        return *this;
    }
};
		
int main()
{
    MyCout ob;
    ob.myCout("1").myCout("2").myCout("3");
    return 0;
}

this是指向ob的,*this就等于ob,于是可以继续调用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值