#include <iostream>
template<class TYPE, int SIZE>
class StaticArray_BASE
{
private:
TYPE mArray[SIZE]{};
public:
TYPE* GetArray()
{
return mArray;
}
TYPE& operator [] (const int& index)
{
return mArray[index];
}
void Print() const
{
for (int i = 0; i < SIZE; i++)
{
std::cout << mArray[i] << ' ';
}
std::cout << '\n';
}
};
template<class TYPE, int SIZE>
class StaticArray : public StaticArray_BASE<TYPE, SIZE>
{
};
template<int SIZE>
class StaticArray<char, SIZE> : public StaticArray_BASE<char, SIZE>
{
public:
void Print() const override //여기에 const만 붙여도 에러나고 override 붙여도 에러나는데 도데체 왜 나는 거임 바꾸는 거 없는데
{
for (int i = 0; i < SIZE; i++)
{
std::cout << (*this)[i];
}
std::cout << '\n';
}
};
저거 주석 부분 왜 그러는 지 좀 알려줘잉~
StaticArray_BASE의 Print가 virtual이 아니기 때문에 override를 붙이면 에러남 Print 안에 있는 (*this)[i]는 non-const member function이기 때문에 const를 붙인 함수에서는 사용할 수 없음
그렇구나 .. 혹시 base클래스에 있는 멤버 변수 protected로 바꾸고
std::cout << StaticArray>::mArray[i]; 이렇게 적어도 const붙이면 에러 뜨던데 이건 혹시 왜그러신지 아시나요 ????? 답변 감사합니다 ㅠ
이런 깨지네
그러게, 그냥 mArray 사용하면 아예 인식을 못하네. StaticArray_BASE를 상속했으니 되어야할거 같은데 StaticArray<char>::mArray하면 사용은 됨