C++ 클래스의 정적 데이터 멤버 (다형성 클래스 변수)에 다형성을 사용할 수 있습니까?C++ 클래스의 정적 데이터 멤버에 대한 다형성
업데이트 : b4hand 명시된 바와 같이, 다형성 메소드는 기본 클래스에서 선언되어야합니다. 그러나이 시나리오에서는 사용자가 containerDerived에서 어떤 메서드를 만들지 미리 알 수 없기 때문에이 작업을 수행 할 수 없습니다.
참조를 포함하도록 예제를 편집했습니다. 나를 상기시켜 주셔서 감사합니다.
#include <iostream>
class numBase //numBase is in a library user can not edit
{
};
class numDer : public numBase //user defined class is a kind of numBase
{
private:
int num;
public:
void printNum() { std::cout << " numDer=" << num; }
void inc() { num++; }
};
class containerBase //containerBase is in a library user can not edit
{
protected:
//static numDer& count; //this compiles, but count can not be initialized to other types
static numBase& count; //this causes error six lines down from here
};
class containerDerived : public containerBase //user defined class is a kind of containerBase
{
public:
void inc() { count.inc(); } //error: 'count' was not declared in this scope
void printCount() { std::cout << " containerDerived"; count.printNum(); }
};
/************************ user program **********************/
//initilialize static variable
numDer number; //number could be any user defined type derived from numBase
numDer& containerBase::count = number; //initialize count to a kind of numBase
int main()
{
containerDerived container1;
containerDerived container2;
container1.printCount();
container1.inc();
container2.inc();
container1.printCount();
}
감사합니다 :
다음은 파생 형 (numDer)에 정적 기본 유형 (numBase)를 초기화하는 나의 시도이다.
'numBase'는 빈 클래스입니다. 'inc()'메소드가 없습니다. 컴파일러 오류가 여기에 꽤 설명이 있습니다, 당신은 실제 문제가 무엇에 더 자세히 설명해 주시겠습니까? –
다형성을 원한다면 다른 곳과 같이 포인터를 사용하십시오. – molbdnilo
'count'가'numBase' 인스턴스가 아니고 numBase 포인터가 아니기 때문에 그럴 수 없습니다. –