문제

편집 : 비공개로 선언하는 것은 오타라고 생각합니다.

다른 질문과 관련하여, 클래스에서 정적 변수를 선언 한 다음 클래스를 도출 한 경우 각 클래스 당 정적 변수를 개별적으로 선언 할 수있는 방법이 있습니까? 즉:

class A:
{
public:
static int x;
};
class B:A
{
public:
const static int x;
};

두 가지 다른 정적 변수를 정의합니까? x, 하나는 A와 B에 하나 또는 재정의에 오류가 발생합니다. x, 그리고 오류가 발생하면 두 개의 별도의 정적 변수를 어떻게 생성합니까?

도움이 되었습니까?

해결책

정적 변수를 사용하는 경우 명시 적으로 언급하는 것이 좋습니다.

public class B:A
{
  public const static int x;
  public int foo()
  {
    return B::x;
  }
}

이렇게하면 계층 구조에서 클래스가 "위"가 "위"라는 경우에도 비슷한 이름을 짓는 멤버를 작성하기로 결정하더라도 코드를 중단하지 않습니다. 마찬가지로, 나는 보통 우리에게 노력합니다 this 일반 회원 필드에 액세스 할 때 키워드.

업데이트되었습니다 C ++ 구문을 사용합니다.

다른 팁

두 개의 개별 정적 변수가 생성됩니다.

이 개인을 암시 적으로 선언했습니다.

class A:
{
  private:
  static int x;
};
class B:A
{
  private:
  const static int x;
};

이는 변수가 서로 경쟁하지 않음을 의미합니다.

이미 말했듯이, 그것은 두 개의 개별 변수를 만듭니다.

A::x;

// and 

B::x;

실제로 B 메소드에서 'X'만 사용하려고하면 더 정확한 스코프 정의 만 사용됩니다.

#include <iostream>

class A
{
protected:
static int x;

public:
    A() { x = 7; }
};

int A::x = 22;

class B:A
{
static const int x = 42;

public:

    int a_x() const { return A::x; }
    int b_x() const { return B::x; }
    int my_x() const { return x; } // here we get the more local variable, that is B::x.
};

int main()
{
    B b;

    std::cout << "A::x = " << b.a_x() << std::endl;
    std::cout << "B::x = " << b.b_x() << std::endl;
    std::cout << "b's x = " << b.my_x() << std::endl;

    std::cin.ignore();
    return 0;
}

출력 :

A::x = 7
B::x = 42
b's x = 42

누군가 접근성이 접근성을 제한 할 수 있다고 언급했습니다. 기본 변수를 비공개로 만들면 아동 클래스에 액세스 할 수 없습니다. 그러나 변수를 보호하거나 공개 해야하는 경우 명시 적 액세스 방법을 사용하거나 방금 보여주는 로컬 범위 규칙에 의존하십시오.

A를 사용하는 각 클래스에 개별 인 정적 변수를 원한다면 템플릿 클래스를 사용할 수 있습니다.
예를 들어

template<class T> struct A
{
   A() { ++s_var; }
   static int s_var;
};

template<class T> int A<T>::s_var;

stuct B :A<B> {
  B() { ++s_var; }  // this is a different s_var than the one used by 'C' below
};

struct C : A<C> {
  C() { ++s_var; } // this is a different s_var than the one used by 'B'
};
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top