C++ 数据拼接时输出成员变量c++;
你好,我目前面临一个问题,我想从两个独立的类输出数据,一个是基类,一个是派生类,我想重载有几种方法来处理这个问题。显然,一种方法是使C++ 数据拼接时输出成员变量c++;,c++,inheritance,operator-overloading,splice,member-access,C++,Inheritance,Operator Overloading,Splice,Member Access,你好,我目前面临一个问题,我想从两个独立的类输出数据,一个是基类,一个是派生类,我想重载有几种方法来处理这个问题。显然,一种方法是使A的成员受到保护,而不是私有的。然后,派生类B可以访问它们 另一种方法是getter函数。它们不能为您工作的事实与构造函数中的问题和代码中的其他问题有关。但是公共getter还有一个缺点,即允许任何人(不仅仅是派生类)访问数据成员的值 这里有第三种方法,我相信在您的案例中是有意义的:定义一个单独的操作符为什么要用您在类中已经使用过的名称命名成员?这与问题没有直接关系
A
的成员受到保护,而不是私有的。然后,派生类B
可以访问它们
另一种方法是getter函数。它们不能为您工作的事实与构造函数中的问题和代码中的其他问题有关。但是公共getter还有一个缺点,即允许任何人(不仅仅是派生类)访问数据成员的值
这里有第三种方法,我相信在您的案例中是有意义的:定义一个单独的
操作符为什么要用您在类中已经使用过的名称命名成员?这与问题没有直接关系,但就目前而言,B
是a
的嵌套类(除了从a
派生)。你希望这样吗?除了尼克所说的之外,a
的构造函数中还有一个问题。您可以根据成员A
的当前大小分配空间,而不是根据pLast
和pFirst
的大小分配空间。
#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;
}
};
#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;
}