상속 받는데도 다음과 같이 에러가 발생하는 이유가 무엇일까요?
// num_sequence.h
#include <iostream>
using namespace std;
class num_sequence
{
public :
num_sequence(int, int);
virtual ~num_sequence(){};
int elem(int pos) const;
virtual const char* what_am_i();
protected :
bool check_integrity(int pos) const;
int val[500];
int _begin;
int _end;
};
inline void display(ostream &os, num_sequence& ns, int pos)
{
os<<\"The element at position \"<<pos<<\"for the \"<<ns.what_am_i()<<\"sequence is \"<<ns.elem(pos)<<endl;
}
//num_sequence.cpp
#include \"num_sequence.h\"
#include <iostream>
using namespace std;
num_sequence::num_sequence(int begin, int end)
{
_begin = begin;
_end = end;
}
int num_sequence::elem(int pos) const
{
return val[pos];
}
bool num_sequence::check_integrity(int pos) const
{
if(pos < 0)
{
cerr<<\"!! invalid position : \"<<pos<<\"Cannot honor request\\n\";
return false;
}
return true;
}
//Fibonacci.h
#include \"num_sequence.h\"
#include <iostream>
using namespace std;
class Fibonacci : public num_sequence
{
public :
friend ostream& operator<<(ostream& os, const Fibonacci &ns);
Fibonacci(int begin, int end);
};
//Fibonacci.cpp
#include \"Fibonacci.h\"
#include <iostream>
using namespace std;
Fibonacci::Fibonacci(int begin, int end)
{
_begin = begin;
_end = end;
for(int i = begin +1; i<end; ++i)
{
val[i] = val[i-2] + val[i-1]; //error : \'val\' : cannot access protected member declared in class \'num_sequence\'
}
}
ostream& operator<<(ostream& os, const Fibonacci &ns)
{
for(int i = 0; i<ns._end; ++i)
//error : \'_end\' : cannot access protected member declared in class \'num_sequence\'
(분명히 하위 클래스(Fibonacci)의 객체 ns의 멤버함수 _end에 접근하는데도 이렇게 에러가 발생합니다.)
{
os<<ns.val[i];
}
return os;
}
const char* Fibonacci::what_am_i()
{
return \"Fibonacci\";
}
//Ex.cpp
#include <iostream>
#include \"Fibonacci.h\"
using namespace std;
int main()
{
Fibonacci fib(1, 10);
cout<<\"fib \"<<fib<<endl;
display(cout, fib, 8);
return 0;
}
1. 생성자에는 부모 클래스 인자를 변경할수 없듬
상속 받은 멤버변수라도 값을 바꿀수 없다는 건가요?
나도 신기하다고 생각해서 찾아봤는데 일단 두번째 문제는
http://kldp.org/node/42763
이거랑 관계가 있는거 같아. 아우 c++ 머리아파
http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2008-01/msg00939.html
역시 해석안됨 눈돌아감