对象指针
对象指针的定义
注意:在继承与派生中,还会涉及到基类指针指向子类对象。
对象指针的使用
例:
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,于是可以继续调用函数