정적 멤버 변수를 기본 클래스에 정의하고이 멤버 변수의 자체 인스턴스를 각각 사용하는 여러 파생 클래스를 갖는 것이 좋습니까?서브 클래 싱 된 클래스의 정적 멤버 변수
다음 코드는 성공적으로 컴파일되고 올바른 출력을 인쇄하지만 그와 같은 작업을 수행하는 것이 좋습니다. 다음 예제에서는 명시 적으로 s의 인스턴스 (string A :: s;를 호출하여)를 하나만 정의하면 어떻게 작동합니까?하지만 실제로 2 개의 인스턴스를 사용합니까?
class A
{
protected:
void SetS(string new_s){s = new_s;}
void PrintS(){cout << s << endl;};
private:
static string s;
};
class B : public A
{
public:
void foo(){ SetS("bbb"); PrintS();};
};
class C : public A
{
public:
void foo(){ SetS("ccc"); PrintS();};
};
string A::s;
int main()
{
B b;
b.foo(); // results in output: bbb
C c;
c.foo(); // results in output: ccc
b.foo(); // results in output: bbb
}
우수 답변. +1. –
고맙습니다. 제 질문에 완전히 대답했습니다. –
기본 클래스는 인터페이스를 정의해야합니다. 하지만 기본 클래스는 그냥 작동 확장 일 수 있습니다. –