c++ 可以对class类使用指针并举例
时间: 2023-12-14 18:36:28 浏览: 110
是的,C++中可以对class类使用指针。指针是一种变量,它存储了另一个变量的地址。通过指针,可以访问和修改存储在该地址处的变量的值。
以下是一个示例代码,演示如何使用指针访问class类的成员变量和成员函数:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
int x;
void print() {
cout << "x = " << x << endl;
}
};
int main() {
MyClass obj;
obj.x = 10;
obj.print(); // 输出: x = 10
MyClass *ptr = &obj;
ptr->x = 20;
ptr->print(); // 输出: x = 20
return 0;
}
```
在上述代码中,我们首先定义了一个名为MyClass的类,其中包含一个整型成员变量x和一个打印成员变量值的成员函数print()。
然后,在main()函数中,我们先创建了一个MyClass类型的对象obj,并设置其成员变量x的值为10,然后调用print()函数打印出x的值。
接着,我们创建了一个名为ptr的指向MyClass类型对象的指针,并将其初始化为指向obj对象。通过指针ptr,我们可以访问和修改obj对象的成员变量x的值,同时也可以调用print()函数打印出x的值。
相关问题
C++静态数据成员和静态成员函数以及new和delete以及指向对象的指针并举例
好的,下面我会分别举例说明。
静态数据成员的例子:
```C++
class MyClass {
public:
static int count; // 静态数据成员
MyClass() { count++; } // 每次创建对象时 count 自增
};
int MyClass::count = 0; // 静态数据成员的初始化
int main() {
MyClass obj1, obj2;
cout << MyClass::count << endl; // 输出 2,因为创建了两个 MyClass 的对象
return 0;
}
```
静态成员函数的例子:
```C++
class MyClass {
public:
static void print(int x) { cout << "x = " << x << endl; } // 静态成员函数
};
int main() {
MyClass::print(10); // 直接通过类名调用静态成员函数
return 0;
}
```
new和delete的例子:
```C++
int main() {
int *ptr = new int; // 动态分配一个 int 类型的内存空间
*ptr = 10; // 对该内存空间进行赋值
cout << *ptr << endl; // 输出 10
delete ptr; // 释放内存空间
return 0;
}
```
指向对象的指针的例子:
```C++
class MyClass {
public:
void print() { cout << "Hello" << endl; }
};
int main() {
MyClass obj;
MyClass *ptr = &obj; // 定义指向 MyClass 对象的指针
ptr->print(); // 通过指针调用 MyClass 对象的 print() 函数
return 0;
}
```
C++ 在第三方库中有注册回调函数,其参数是函数指针,我如何在自己的类中定义这个函数指针,并在这个指针函数中使用类中函数,请举例说明
假设有一个第三方库,其中定义了一个函数 `register_callback`,它的参数是一个函数指针,指向一个回调函数,原型如下:
```c++
typedef void (*CallbackFunc)(int arg1, int arg2);
void register_callback(CallbackFunc callback);
```
现在我们要在自己的类中定义这个回调函数,并在其中使用类中的成员函数。可以使用静态成员函数来实现这一目标。
例如,我们定义一个名为 `MyClass` 的类,它有一个成员函数 `my_callback`:
```c++
class MyClass {
public:
void my_callback(int arg1, int arg2) {
// 在这里实现回调函数的逻辑
}
};
```
我们可以再定义一个静态成员函数 `static_callback`,它将调用成员函数 `my_callback`:
```c++
class MyClass {
public:
void my_callback(int arg1, int arg2) {
// 在这里实现回调函数的逻辑
}
static void static_callback(int arg1, int arg2) {
MyClass* obj = reinterpret_cast<MyClass*>(arg1);
obj->my_callback(arg1, arg2);
}
};
```
然后我们可以在 `MyClass` 的构造函数中注册这个回调函数:
```c++
class MyClass {
public:
MyClass() {
register_callback(&MyClass::static_callback);
}
void my_callback(int arg1, int arg2) {
// 在这里实现回调函数的逻辑
}
static void static_callback(int arg1, int arg2) {
MyClass* obj = reinterpret_cast<MyClass*>(arg1);
obj->my_callback(arg1, arg2);
}
};
```
这样,当第三方库调用回调函数时,会先调用 `static_callback` 函数,然后再调用 `my_callback` 函数,从而实现在类中使用回调函数的目的。
阅读全文