gpt4 book ai didi

c++ - 我如何打印类中指针指向的值

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:52 30 4
gpt4 key购买 nike

大家好!

我有一个问题请问:-

如果我有一个空指针“vp”并且这个指针是类“cl”的成员,我如何打印指针“vp”指向的值?提前致谢这是我的代码:

#include <iostream>
#include<conio.h>



using namespace std;

class putIN
{
public:
void *vp;
int *intP;float *floatP;double *doubleP;
int valueInt;
double valueDouble;
char valueFloat;

putIN();
putIN(int x);
putIN(double x);
putIN(float x);
~putIN()
{
delete intP;
delete floatP;
delete doubleP;
}
};


putIN::putIN(int x){vp = & valueInt; *((int*)vp) = x;}
putIN::putIN(float x){vp = & valueFloat; *((float*)vp) = x;}
putIN::putIN(double x){vp = & valueDouble; *((double*)vp) = x;}


int main()
{
putIN x = 5;
cout<<?????<<endl;// what do i have to put instead of the ??????
//to print the value that *vp point to
getch();
return 0;
}

最佳答案

如果你想打印指针的值(即地址),只需使用 putIN.vb .

如果你想打印指针指向的值,那么你必须知道哪种类型(例如使用强制转换,就像你在构造函数中所做的那样。但是你是否在某处存储了关于类型的信息,以便你可以稍后还记得您存储了什么吗?

顺便说一句,你的delete语句将出现段错误,因为您尝试删除不是通过 new 获得的指针.

我没有完全理解你想要达到的目标,但你可以详细说明一下,像这样:

class putIN
{
public:
char mytype; // I for int, F for float, etc...
void *vp;
union { // as you use only one of them:
int valueInt;
double valueDouble;
float valueFloat;
} value;
...
};
putIN::putIN(int x){vp = &value.valueInt; *((int*)vp) = x; mytype='I'; }

考虑到这一点,您可以重载运算符<<

ostream& operator<< (ostream& os, putIN p) {
if (mytype=='I')
os << *(int*)vp;
else // ... the handling of other supported types here
return os;
}

然后您只需将结果输出到 main() 中通过写作 cout<<x<<endl;

另一种选择是创建一个模板类。

    template <class T>
class putIN
{
public:
T *vp;
T value;

putIN(T x) {vp = &value; *vp = x;}
~putIN() {}
//...
};

还有另一种方法是使用 boost:variant 它提供了您所有的需求,随时可用并且已经过测试。

关于c++ - 我如何打印类中指针指向的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979652/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com