I have 2 classes, A and B. In A I have 3 private fields. In class B I would like to write a copy constructor, and initialize private fields from class A. However, this does not work:
#include <iostream>
#include <string>
using namespace std;
class A
{
    private:
        string *field1;
        string *field2;
        string *field3;
        double num1;
    public:
        A(string *o, string *n, string *m, double a=0)
        {
            field1 = new string(*o);
            field2 = new string(*n);
            field3 = new string(*m);
            num1 = a;
        }
        A(const A& other) {
            field1 = new string(*other.field1);
            field2 = new string(*other.field2);
            field3 = new string(*other.field3);
            num1 = other.num1;
        }
        void show()
        {
            cout << *field1 << " " << *field2 << " " << *field3 << "\n";
        }
        ~A()
        {
            delete field1;
            delete field2;
            delete field3;
        }
};
/*--------------------------------------------------------------------------------------------*/
class B : public A
{
    private :
        double num2;
        double num3;
    public:
        B(double num2, double num3, string *o, string *n, string *num, double a=0) : A(o,n,num,a)
        {
            this->num2 = num2;
            this->num3 = num3;
        }
        B(const B& other) : A(other.field1, other.field2, other.field3, other.num1)
        {
            num2 = other.num2;
            num3 = other.num3;
        }
        void show()
        {
            cout << num2 << " " << num3 << "\n";
            A::show();
        }
};
int main()
{
    string o = "TEXT 111";
    string *optr = &o;
    string n = "TEXT 222";
    string *nptr = &n;
    string *numptr = new string("9845947598375923843");
    A ba1(optr, nptr, numptr, 1000);
    ba1.show();
    A ba2(ba1);
    ba2.show();
    A ba3 = ba2;
    ba3.show();
    B vip1(20, 1000, optr, nptr, numptr, 3000);
    vip1.show();
    B vip2(vip1);
    vip2.show();
    delete numptr;
    return 0;
}
I DO understand that when I change from private to protected it should work (and works, of course) - but how to deal with the situation that I have in my code? The question is: how to initialize, in copy constructor, private fields from base class? I get the following errors with the current code:
/home/yak/test.cpp|9|error: ‘std::string* A::field1’ is private|
/home/yak/test.cpp|61|error: within this context|
/home/yak/test.cpp|10|error: ‘std::string* A::field2’ is private|
/home/yak/test.cpp|61|error: within this context|
/home/yak/test.cpp|11|error: ‘std::string* A::field3’ is private|
/home/yak/test.cpp|61|error: within this context|
/home/yak/test.cpp|12|error: ‘double A::num1’ is private|
/home/yak/test.cpp|61|error: within this context|
||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 
     
     
    