2011-06-13 3 views
0

기본적으로 객체 클래스가 데이터를 저장하는 핵심으로 포함 된 C++ 응용 프로그램 프로젝트를 시작하고 일부 함수는 해당 객체의 데이터를 처리하여 필요한 정보를 얻습니다. 이전에 VB.net에서 비슷한 내용으로 작성했으며 C++로 작아 진 프로그램을 작성했지만 Turbo C++에서 돌아 왔고 자체 클래스를 작성하지 않았습니다. VC++에서이 글을 쓰고 싶습니다. 시작하기 전에이 클래스를 구성하는 것에 대한 조언을 구하고 싶습니다. VB.net에서 비슷한 결과를 얻었을 때, 구조와 함수가 주요 구조에 중첩되어있는 방식을 사용했습니다. 예를 들면 :배열을 포함한 C++ 클래스

Public Structure struct_Tags 
    Public Structure struct_TagProps 
     Public Name As String 
     Public Value As String 
    End Structure 
    Public TagName As String 
    Public TagProperties() As struct_TagProps 
    Public Function HasProperties() As Boolean 
     HasProperties = False 
     If Not TagProperties Is Nothing Then 
      HasProperties = True 
     End If 
    End Function 
End Structure 
Dim obj_Tags() As struct_Tags

이 방법을 VB.net에서 잘 근무하고있다, 나는 내 처리 루프 내부에 필요할 때마다 나는 동적 +1 obj_Tags()obj_Tags().TagProperties()을 redimension. 하지만 내 reasearch 말해 C++에서 내 클래스에 TagProperties 구조체의 빈 배열 변수를 가질 수 없습니다. 이 올바른지? 배열 경계가 사전에 어떻게 될지를 알 수있는 방법이 없으므로이 클래스를 동적으로 배열 경계를 변경하도록 설정하는 방법은 무엇입니까? 벡터를 사용하여? 배열에 치수를 동적으로 추가 할 수있는 한 [0]을 사용하여 배열을 초기화 할 수있었습니다. 그게 가능하니? 모든 도움을 미리 감사드립니다.

+0

등가는'표준 : vector'입니다 : –

+0

나는이 사이트의 정보를 읽고 웹에서 많은 정보를 읽었습니다. 제가 한 일은 모든 것을 전망에 담기위한 충고였습니다. 저는 여기에 그 사실을 알게되어 매우 기쁩니다. 답장의 조언 부분을 보내 주셔서 감사합니다. :) – DaveLock

답변

1
struct struct_Tags { 
    struct struct_TagProps { 
     string Name; 
     string Value; 
    }; 
    string TagName; 
    vector<struct_TagProps> TagProperties; 
    bool HasProperties() const { 
     return !TagProperties.empty(). 
    } 
}; 
vector<struct_Tags> obj_Tags; 

뭔가를 삽입합니다. C++ 책을 읽으십시오.
+0

조언과 시간을내어 훌륭한 예를 들어 주셔서 감사합니다, ybungalobill. 이것은 나를 위해 그것을 명확히 해줍니다. 많은 감사를드립니다. 다른 모든 비슷한 조언 덕분에, 그것은 나에게 매우 도움이됩니다. 궁금한 점은, 클래스 내의 구조체가 아니라 구조체 내의 구조체 인 객체에 이점이 있습니까? – DaveLock

+0

@Dave : [class vs struct] 참조 (http://stackoverflow.com/questions/2750270/c-c-struct-vs-class) – ybungalobill

0

에 따라 다릅니다 배열의 어떤 종류의 당신이 필요로 : 당신이 동적으로 할당 (가변 크기) 배열을 필요로한다면, std::vector

.

더 간단한 배열이 필요하면 크기를 조정할 수 없으므로 boost::array을 살펴보십시오.

0

배열을 만드는 가장 좋은 방법은 std::vector을 사용하는 것입니다. [] 표기법을 사용하여 클래식 배열을 사용하는 경우 런타임에 배열의 크기를 다시 조정할 수 없습니다. 새 배열을 만들고 이전 배열을 복사 한 다음 이전 배열을 삭제해야합니다. 어쨌든, 그것은 복잡한 일이고, 다른 사람들에 의해 말했듯이, std::vector을 사용하십시오.

struct_Tags newValue; 

struct_Tags::struct_TagProps newProps = { "my name", "my value" }; 
newValue.TagProperties.push_back(newProps); 

obj_Tags.push_bcak(newValue); 
관련 문제