C++에서 여러 유형의 포인터 배열을 사용할 수 있습니까? 당신은 무효 *를 사용하는 경우 포인터의 다른 "종류"의 컬렉션을 갖고 싶어 예하시기 바랍니다)C++에서 다른 유형의 포인터 배열을 사용할 수 있습니까?
답변
C++는 C가 더 많은 항목입니다. 그래서 위와 같이 C 방법을 원할 경우 void 포인터 배열을 만듭니다.
void *ary[10]; ary[0] = new int(); ary[1] = new float();
DA.
개체 지향적 인 방식으로 작업하려는 경우 컬렉션을 사용하고 컬렉션에 추가 할 모든 기본 사항을 컬렉션에 추가 할 수있는 동일한 기본 개체 클래스에서 파생 시키십시오. . 이것은 java에서 "Object"입니다. C++에는 기본 객체가 내장되어 있지 않지만 사용하는 모든 수집 라이브러리에는 하위 클래스를 만들 수있는 기능이 있습니다.
와 이 ..., 그것은 ;-)
예를 들어주지 않을 수 있습니까?)) – SomeUser
잠재적으로 폭발적인 상황이 발생할 수 있습니다! – CookieOfFortune
char * c_string = "Hello World"; MyCPlusPlusClass * obj = new MyCPlusPlusClass(); void * SomeArray [] = {c_string, obj}; 물론, 무엇이 무엇인지를 기억하는 방법이 있으면 더 좋을 것입니다. :-) – asveikau
일반적으로 쉽게, 당신은 방법으로 그것을 구현 여기서 그것들은 기본 클래스/인터페이스를 파생시키고 그베이스에 대한 포인터를 저장합니다. 그런 다음 다형성을 통해 서로 다른 유형의 동작을 수행 할 수 있습니다.
class Base
{
public:
virtual void doSomething() = 0;
};
class A : public Base
{
void doSomething() { cout << "A\n"; }
};
class B : public Base
{
void doSomething() { cout << "B\n"; }
};
std::vector<Base*> pointers;
pointers.push_back(new A);
pointers.push_back(new B);
예; 배열에서 포인터를 참조하려는 유형으로 캐스팅하십시오.
다른 방법으로 배열의 유니온 요소를 다른 포인터 유형으로 만들 수 있습니다.
void에 대한 포인터 배열은 이미 언급되었습니다. 실용적이고 유용하게 사용하려면 boost::any의 배열 (또는 더 나은 벡터)을 사용하는 것이 좋습니다.
예. 두 가지 방법 :
• 기본 유형에서 파생 된 유형의 객체를 가리키는 기본 클래스 유형에 대한 포인터.
• 유형이 지정되지 않은 void *
포인터는 포인터를 가리키는 실제 오브젝트 유형으로 수동 변환해야합니다.
첫 번째 방법은 표준 객체 지향 프로그래밍입니다.
두 번째 방법은 저수준 프로그래밍 (예 : 장치 드라이버, 메모리 관리 라이브러리 등)에 유용하며 자신이하는 일을 정확히 알고있는 프로그래머에게만 위험하고 적합하다고 간주됩니다. 분명히 각 포인터의 실제 유형이 무엇인지 알려주는 부가적인 부기 정보가 필요합니다.
#include <stdio.h>
int main(void)
{
void * ptr[2];
int *a;
int b;
ptr[0] = "[0] = \"This is a string & c does it better\", [1] = ";
*a = 2;
ptr[1] = a;
b = *((int *) ptr[1]);
printf("%s", (char *) ptr[0]);
printf("%i\n", b);
return 0;
}
- 1. C : 모든 유형의 포인터?
- 2. ListBox에서 다른 유형의 항목에 다른 템플릿을 사용할 수 있습니까?
- 3. 어떤 유형의 주석 (또는 다른 객체)을 사용할 수 있습니까?
- 4. C에서 런타임에 결정된 주어진 유형의 포인터로 캐스트 할 수 있습니까?
- 5. C에서 포인터 배열
- 6. C에서 포인터 복사
- 7. Python : 다른 유형의 다차원 배열
- 8. C에서 함수 중 struct에 대한 포인터 배열을 전달할 때의 문제
- 9. C에서 포인터 조작
- 10. C에서 유형의 인터페이스 반영하기
- 11. C에서 비슷한 유형의 캐스팅 #
- 12. 포인터 컨테이너 라이브러리를 부스트 세이프 컨테이너 컬렉션으로 사용할 수 있습니까?
- 13. 다른 유형의 조건부로 프로젝트를 진행할 수 있습니까?
- 14. C에서 음수 배열 색인을 사용할 수 있습니까?
- 15. opendir을 C에서 반복적으로 사용할 수 있습니까?
- 16. c에서 serialport 클래스를 사용할 수 있습니까?
- 17. C에서 부울 반환 유형을 사용할 수 있습니까?
- 18. 다른 유형의 배열
- 19. 특정 유형의 포인터가 아닌 NSArray 포인터 전달
- 20. 어떻게이 PHP 배열을 사용할 수 있습니까?
- 21. C++로지도 배열을 사용할 수 있습니까?
- 22. 작은 데이터베이스로 JSON 배열을 사용할 수 있습니까?
- 23. 맞춤 모듈 배열을 사용할 수 있습니까?
- 24. C에서 학습 포인터
- 25. C에서 포인터 표현식에 어떤 문제가 있습니까?
- 26. C에서 포인터 표기법
- 27. 포인터 산술 C에서
- 28. Java : 서로 다른 유형의 배열을 다른 배열로 정렬
- 29. 포인터 배열을 사용하는 데 문제가 있습니까?
- 30. 다른 필드에서 다른 방언을 사용할 수 있습니까?
당신이 보여준 점을 감안할 때, 세상에서 포인터가 실제로 가리키는 유형을 어떻게 알 수 있습니까? – sbi
글쎄, 첫째로, 그건 질문이 아니었지만 대답하는 데는 모든 종류의 방법이 있습니다. 1) 인코딩 된 유형의 병렬 배열을 사용할 수 있습니다. 2) 당신이 거기에 넣을 수있는 모든 다른 종류의 것들을 가진 배열과 변수 타입의 배열 요소 구조를 만들 수 있습니다. 내 머리 꼭대기에 2 개가 있습니다. 나는 다른 누군가가 더 매끄러운 대안을 생각해 낼 수있을 것이라고 확신한다. – stu
@sbi : RTTI를 사용할 수도 있습니다. – kriss