В классе С2 есть метод для вывода массива строк и этот метод работает правильно. В классе C3 есть другой метод для вывода массива строк с шириной поля, но он не выводит массив строк, который объявлен в классе С2, хотя класс С3 является наследником класса С2. Когда я вставил в метод другую строку, то выведение на консоль было. Поэтому сделал вывод, что дело в наследовании.
#include <iostream>
#include <Windows.h>
#include <iomanip>
#include <string>
using namespace std;
class C1
{
public:
string myString;
void inputString()
{
cout << "Укажіть рядок ";
cin >> myString;
}
void outputString()
{
cout << myString << endl;
}
};
class C2 : public C1
{
public:
string *arrayStrings;
int size;
C2()
{
size = 5;
arrayStrings = new string[size];
}
void inputArray()
{
cout << "Укажіть масив рядків ";
for (int i = 0; i < size; i++)
{
cin >> arrayStrings[i];
}
}
void outputArray()
{
for (int i = 0; i < size; i++)
{
cout << arrayStrings[i].c_str() << endl;
}
}
};
class C3 : public C2
{
private:
int textColor;
int backgroundColor;
int width;
public:
C3(int t, int b, int w)
{
textColor = t;
backgroundColor = b;
width = w;
}
void setColor()
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)(backgroundColor << 15) | textColor);
}
void outputArray()
{
for (int i = 0; i < size; i++)
{
cout << setw(width) << arrayStrings[i].c_str() << endl;
}
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
C1 a;
a.inputString();
a.outputString();
C2 b;
b.inputArray();
b.outputArray();
C3 c(14, 0, 15);
c.setColor();
c.outputArray();
return 0;
}