这篇文章主要是我在学习中遇到的问题,然后记录一下用法。
首先呢,我们创建了几个类,每个类里都有自己的属性成员,然后我创建了一个类指针对象去对里面的成员进行一些设置,然后呢因为一些函数参数的原因,需要把该类指针类型转换为void指针类型,但是我们进行传参之后,就比如在线程处理的那个函数里,我们需要用到这个传过来的void指针类型的东西,不过我们实际用的是那个类指针,所以呢就需要讲传进来的void*指针再变为类指针类型。
具体案例看以下示例
创建一个基类
class A {
public:
int x;
int y;
};
然后有两个子类继承了基类
class B : public A{
public:
string b;
};
class C : public A {
public:
string c;
};
在main函数中对其进行一些成员属性的设置
int main() {
B* b = new B;
b->x = 5;
b->y = 10;
b->b = "B::b";
C* c = new C;
c->x = 50;
c->y = 100;
c->c = "C::c";
test((void*)b);
test2((void*)c);
return 0;
}
测试函数
void test(void* tag) {
B* bb = static_cast<B*>(tag);
cout << "x: " << bb->x << " y: " << bb->y << " b:" << bb->b << endl;
}
void test2(void* tag) {
C* cc = static_cast<C*>(tag);
cout << "x: " << cc->x << " y: " << cc->y << " b:" << cc->c << endl;
}
全部代码如下
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class A {
public:
int x;
int y;
};
class B : public A{
public:
string b;
};
class C : public A {
public:
string c;
};
void test(void* tag) {
B* bb = static_cast<B*>(tag);
cout << "x: " << bb->x << " y: " << bb->y << " b:" << bb->b << endl;
}
void test2(void* tag) {
C* cc = static_cast<C*>(tag);
cout << "x: " << cc->x << " y: " << cc->y << " b:" << cc->c << endl;
}
int main() {
B* b = new B;
b->x = 5;
b->y = 10;
b->b = "B::b";
C* c = new C;
c->x = 50;
c->y = 100;
c->c = "C::c";
test((void*)b);
test2((void*)c);
return 0;
}
执行程序效果如下
这样我就能够在这个函数里使用到原本类指针对象里的成员了。如果是其他指针类型也转换成void*类型的话,应该也可以通过这样的操作来获取之前那个指针类型里的东西。