std :: vector에서 상속

KoolaidLips

현재 std :: vector에서 파생되어야하는 클래스를 만들고 있습니다. 나는 이것을하는 것이 아마도 나쁘다는 것을 알고 있지만 나는 그렇게해야한다. 이제 내 질문은 멤버 함수에서 생성 된 벡터에 액세스하여 기본적으로 클래스가 정수의 일반 벡터처럼 액세스하도록 만드는 방법입니다. 예를 들어, 벡터의 첫 번째 항을 반환하기 위해 myVector.at (0)에 해당하는 것을 찾고 있습니다. 또한 벡터의 크기는 항상 6이어야합니다. 지금까지 가지고있는 코드는 다음과 같습니다.

class aHistogram : public vector<int>
{
public:
    aHistogram(); //default constructor for histogram class
    void update(int face); //Function to update histogram
    void display(int maxLengthOfLine); //Displays histogram to the scale of maxLengthOfLine using    x's
    void clear();//Function to clear histogram bin counts
    int count(int face) const; // Function to return number of times a face has appeared
private:
    int numx, m, j; //Variables used in functions
};

#endif

클래스가 자체적으로 액세스해야하는 함수는 다음과 같습니다. "myVector"라는 벡터가 없다는 것을 알고 있지만 제가 잃어버린 것은 작업을 수행 할 수있는 동등한 구문입니다.

void aHistogram::clear() 
{
    //Clears bin counts to 0
    myVector.at(0) = 0;
    myVector.at(1) = 0; 
    myVector.at(2) = 0;
    myVector.at(3) = 0;
    myVector.at(4) = 0;
    myVector.at(5) = 0;
}
James Kanze

문제의 함수가 파생 클래스에서 재정의되지 않은 경우 호출 할 수 있습니다.

void HistoGram::clear()
{
    at( 0 ) = 0;
    //  ...
}

이것은 연산자에도 해당되지만 (*this)왼손 연산자 로 사용해야 합니다.

void HistoGram::clear()
{
    (*this)[0] = 0;
    //  ...
}

함수 또는 연산자가 재정의 된 경우 함수 이름을 한정해야합니다.

void HistoGram::clear()
{
    std::vector<int>::at( 0 ) = 0;
    //  ...
}

또는 this 포인터를 기본 클래스 유형으로 캐스팅합니다.

void HistoGram::clear()
{
    (*static_cast<std::vector<int>*>( this ))[0] = 0;
    //  ...
}

하지만 여기서 공개 상속을 원하십니까? 벡터의 크기는 항상 6이어야한다고 말합니다. public 상속을 사용한다고 보장 할 수있는 방법은 없습니다. 최소한 개인 상속이 필요 using하고 지원하려는 작업에 대한 선언이 필요합니다. ( std::vector개인 상속을 사용하여 구현 한 이와 같이 제한해야하는 몇 가지 경우가 있습니다. 예를 들어 const함수 버전 만 노출하고 싶을 때 함수를 전달하기도 합니다.)

또한 std::vector<>::at적절한 경우가 거의 없습니다 . []대부분의 최신 구현에서 얻을 수있는 경계 검사로 원하지 않습니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

std :: ostringstream에서 상속

분류에서Dev

std :: vector를 상속하는 클래스 내에서 operator [] 사용

분류에서Dev

std :: enable_shared_from_this에서 상속

분류에서Dev

std :: runtime_error에서 상속

분류에서Dev

std :: vector 함수 수정 (상속?)

분류에서Dev

std :: vector 및 std :: deque에서 요소의 연속 저장 위치

분류에서Dev

std :: string 또는 연산자 오버로딩에서 상속

분류에서Dev

새로운 C ++ 11 std :: async로 std : .vector 채우기 속도 향상

분류에서Dev

클래스의 std :: vector에서 클래스의 다른 속성 비교

분류에서Dev

std :: vector에서 delete 호출

분류에서Dev

C ++에서 상속하지 않고 컨테이너의 기능 (예 : std :: vector)을 확장하는 적절한 방법은 무엇입니까?

분류에서Dev

std :: array에서 비공개로 상속 할 때 std :: initializer_list에서 생성 할 수 없습니다.

분류에서Dev

std :: vector <std :: string>에서 요소 제거

분류에서Dev

std :: exception에서 상속 된 예제 코드가 연결되지 않습니다.

분류에서Dev

std :: vector <std :: vector <std :: string >>에서 항목 확인하기 std :: find 사용

분류에서Dev

속성에서 상속

분류에서Dev

MasterPage에서 상속

분류에서Dev

ListBox에서 상속

분류에서Dev

"std :: shared_from_this"는 파생 클래스에 상속 될 수 없습니까?

분류에서Dev

C ++ std :: vector에서 std :: function 제거 <std :: function <... >>

분류에서Dev

std :: vector의 push_back 함수에 대한 이상한 구문

분류에서Dev

구조체에서 std :: vector 초기화

분류에서Dev

MSVC에서 std :: vector :: push_back 구현

분류에서Dev

Cython의 std : vector에서 요소 제거

분류에서Dev

std :: vector <int>에서 char [] C ++로 변환

분류에서Dev

정수에서 std_logic_vector 빼기

분류에서Dev

std :: vector에서 함수 호출 병렬

분류에서Dev

Windows에서 C ++ std :: fstream으로 만든 파일 핸들의 상속 가능성 제어

분류에서Dev

std :: streambuf에서 상속시 호환되지 않는 소멸자 컴파일러 경고

Related 관련 기사

  1. 1

    std :: ostringstream에서 상속

  2. 2

    std :: vector를 상속하는 클래스 내에서 operator [] 사용

  3. 3

    std :: enable_shared_from_this에서 상속

  4. 4

    std :: runtime_error에서 상속

  5. 5

    std :: vector 함수 수정 (상속?)

  6. 6

    std :: vector 및 std :: deque에서 요소의 연속 저장 위치

  7. 7

    std :: string 또는 연산자 오버로딩에서 상속

  8. 8

    새로운 C ++ 11 std :: async로 std : .vector 채우기 속도 향상

  9. 9

    클래스의 std :: vector에서 클래스의 다른 속성 비교

  10. 10

    std :: vector에서 delete 호출

  11. 11

    C ++에서 상속하지 않고 컨테이너의 기능 (예 : std :: vector)을 확장하는 적절한 방법은 무엇입니까?

  12. 12

    std :: array에서 비공개로 상속 할 때 std :: initializer_list에서 생성 할 수 없습니다.

  13. 13

    std :: vector <std :: string>에서 요소 제거

  14. 14

    std :: exception에서 상속 된 예제 코드가 연결되지 않습니다.

  15. 15

    std :: vector <std :: vector <std :: string >>에서 항목 확인하기 std :: find 사용

  16. 16

    속성에서 상속

  17. 17

    MasterPage에서 상속

  18. 18

    ListBox에서 상속

  19. 19

    "std :: shared_from_this"는 파생 클래스에 상속 될 수 없습니까?

  20. 20

    C ++ std :: vector에서 std :: function 제거 <std :: function <... >>

  21. 21

    std :: vector의 push_back 함수에 대한 이상한 구문

  22. 22

    구조체에서 std :: vector 초기화

  23. 23

    MSVC에서 std :: vector :: push_back 구현

  24. 24

    Cython의 std : vector에서 요소 제거

  25. 25

    std :: vector <int>에서 char [] C ++로 변환

  26. 26

    정수에서 std_logic_vector 빼기

  27. 27

    std :: vector에서 함수 호출 병렬

  28. 28

    Windows에서 C ++ std :: fstream으로 만든 파일 핸들의 상속 가능성 제어

  29. 29

    std :: streambuf에서 상속시 호환되지 않는 소멸자 컴파일러 경고

뜨겁다태그

보관