在数据拼接 C++ 时输出成员变量
Outputting member variables when data is spliced c++
您好,我目前面临一个问题,我想从 2 个单独的类输出数据,一个是基类,一个是派生类,我想重载 <<运算符一次输出所有数据,但似乎很难这样做,我有这样的东西:
#include <iostream>
using namespace std;
class A
{
char* A;
char* B;
public:
A() {A = ' '; B = ' ';}
A(char* pLast, char* pFirst)
{
A = new char [strlen(pLast) + 1];
B = new char [strlen(pFirst) + 1];
strcpy(A,pLast);
strcpy(B,pFirst);
};
}
class C:public A
{
int X;
char Y;
int Z;
public:
C(char* A, char* B, int X, char Y, int Z)
:A(A,B)
{
//do stuff here
}
friend std::ostream& operator<<(std::ostream& out, const C& outPut)
{
out << outPut.A << "," << outPut.B << "," <<outPut.X<< "," << outPut.Y << "," << outPut.Z << endl;
return out;
}
};
当我尝试运行它时,它告诉我 A 和 B 超出了范围,这是有道理的,因为这些成员在 A 类中是私有的,我不知道如何解决这个问题。我尝试创建 getter 方法来访问 A 和 B,但数据显示为空白。我什至尝试将类 A 的对象添加为类 B 的成员,以尝试允许访问类 B 中的成员,但数据仍然为空白。如何解决此问题?
有几种方法可以解决这个问题。一种方法显然是使A
的成员受到保护而不是私有。然后,派生类B
可以访问它们。
另一种方式确实是吸气函数。它们不适合您的事实与构造函数中的问题和代码中的其他问题有关。但是,公共获取者也有一个缺点,即允许任何人(不仅仅是派生类)访问数据成员的值。
这是第三种方法,我认为在您的情况下是有意义的:在A
中定义一个单独的operator<<
,并在为B
定义运算符时使用该运算符:
#include <cstring>
#include <iostream>
using namespace std;
class A
{
char* _a;
char* _b;
public:
A()
: _a(),_b()
{ }
A(const char *pLast, const char *pFirst)
: _a(new char [std::strlen(pLast)]),
_b(new char [std::strlen(pFirst)])
{
strcpy(_a,pLast);
strcpy(_b,pFirst);
}
friend std::ostream& operator<<(std::ostream& out, const A& obj)
{
out << obj._a << "," << obj._b;
return out;
}
};
class B : public A
{
int _x;
char _y;
int _z;
public:
B(const char *pLast, const char *pFirst, int x, char y, int z)
: A(pLast,pFirst),
_x(x),_y(y),_z(z)
{ }
friend std::ostream& operator<<(std::ostream& out, const B& obj)
{
out << static_cast<const A&>(obj) << ','
<< obj._x << ','
<< obj._y << ','
<< obj._z;
return out;
}
};
int main()
{
B b("hello","world",1,'a',3);
std::cout << b << std::endl;
return 0;
}
我还纠正了我发现的其他问题,因此上述方法实际上有效。
相关文章:
- c++ 将成员函数的输出写入文本文件
- C++具有模板成员变量的类. 和参数内存输出
- 如何调试输出指向成员的指针
- 为什么当类的数据成员更改为引用时输出不同
- 如何从doxygen输出中排除类的无证件成员函数/变量
- C++输出对象中的所有成员
- 具有类构造函数和类成员变量的意外输出值
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 将非零矢量成员读取为阵列和输出点产品
- 在数据拼接 C++ 时输出成员变量
- 覆盖运算符<< 对于控制台输出不适用于成员变量
- 正在输出类型向量的成员类型
- 在Rcpp中初始化NumericMatrix类成员后未收到的输出
- C++子级在复制构造函数和输出之间的某个时间点更改父成员
- 要写入输出迭代器的模板成员函数
- 当传入具有std::string成员的结构时,C++-gdb会给出意外的输出
- 重载运算符<<输出地址而不是数据成员
- 当我们对没有任何数据成员的类的对象使用sizeof运算符时.那么输出会是什么
- 在std::for_each中对成员函数的输出进行迭代
- 重载运算符<<在不使用友元函数的情况下输出对象成员