c++ как наследовать private переменную из базового в private секцию дочернего класса?
Допустим у меня есть интерфейс А и класс B, который наследуется от А. В классе А есть переменные хранящие данные о файле, а B загружает файл и записывает эти данные, они должны быть в private.
Как сделать так, чтобы при наследовании переменные из А были недоступны, но их можно было использовать в B ?
template <typename _T>
class A {
public:
virtual void LoadFile(const char* FileName) = 0;
private:
_T* m_DataPtr;
int m_ID;
const char* m_FileName;
};
class B : A<char> {
using A<char>::m_FileName; // C2877 'A<char>::m_FileName' is not accessible from 'A<char>'
using A<char>::m_DataPtr; // C2877 'A<char>::m_DataPtr' is not accessible from 'A<char>'
using A<char>::m_ID; // C2877 'A<char>::m_ID' is not accessible from 'A<char>'
public:
B() = default;
~B() {
delete(m_DataPtr); // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'
m_ID = 0; // Error C2248 'A<char>::m_ID': cannot access private member declared in class 'A<char>'
}
void LoadFile(const char* FileName) {
FILE* file = fopen(FileName, "r");
m_FileName = FileName; // Error C2248 'A<char>::m_FileName': cannot access private member declared in class 'A<char>'
m_ID = 1; // Error C2248 'A<char>::m_ID': cannot access private member declared in class 'A<char>'
m_DataPtr = new char[10]; // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'
fread(m_DataPtr, 1, 10, file); // Error C2248 'A<char>::m_DataPtr': cannot access private member declared in class 'A<char>'
fclose(file)
}
};
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Объявить коасс B другом класса A.
В классе A написать:
friend class B;
Както так:
class B;
template <typename _T>
class A {
friend class B;
public: