在C++中,类的指针是一个指向类对象的指针。类的指针可以像普通指针一样用于动态分配内存、访问成员函数和成员变量。通过类的指针,可以实现多态性、动态绑定和其他面向对象编程的特性。
1. 定义和初始化类的指针
类的指针声明和普通指针类似,只不过指针类型是一个类类型。
#include <iostream>
using namespace std;
class MyClass {
public:
void display() {
cout << "Display function of MyClass" << endl;
}
};
int main() {
MyClass obj; // 创建类对象
MyClass* ptr = &obj; // 声明指向类对象的指针并初始化
// 通过指针访问对象的成员函数
ptr->display(); // 输出: Display function of MyClass
return 0;
}
在上述例子中,ptr
是一个指向 MyClass
对象 obj
的指针。通过 ptr->display()
可以调用 obj
的 display()
成员函数。
2. 通过指针访问类的成员
使用类的指针可以访问类的成员变量和成员函数。可以使用箭头操作符 ->
来访问指针所指向的对象的成员。
#include <iostream>
using namespace std;
class MyClass {
public:
int data;
void display() {
cout << "Data: " << data << endl;
}
};
int main() {
MyClass obj;
obj.data = 10;
MyClass* ptr = &obj; // 指向类对象的指针
cout << ptr->data << endl; // 访问成员变量,输出: 10
ptr->display(); // 访问成员函数,输出: Data: 10
return 0;
}
3. 类的指针与多态性
多态性是面向对象编程中的一个重要概念。通过类的指针,可以实现运行时的动态绑定。使用虚函数和基类指针,程序可以在运行时确定调用哪个函数。
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() {
cout << "Base class show function" << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived class show function" << endl;
}
};
int main() {
Base* bptr; // 基类指针
Derived d;
bptr = &d; // 基类指针指向派生类对象
bptr->show(); // 调用的是派生类的 show() 函数,输出: Derived class show function
return 0;
}
在这个例子中,bptr
是一个基类 Base
的指针,但它指向了一个派生类 Derived
的对象 d
。由于 show()
函数是虚函数,所以 bptr->show()
实际上调用的是 Derived
类中的 show()
函数,从而实现了多态性。
总结
- 定义和初始化:类的指针可以指向类的对象,并使用
&
操作符获取对象的地址进行初始化。 - 访问成员:可以使用箭头操作符
->
通过指针访问对象的成员函数和成员变量。 - 多态性:通过基类指针指向派生类对象,并调用虚函数,可以实现多态性,允许在运行时确定调用的是哪个类的函数。