전체 글 (93)
-
2015.09.17 [C++] 메세지 패싱
메세지 패싱이란 무엇인가 메세지 전달 (message passing) 객체지향 관점에서, 프로그램은 오브젝트에 message를 보내는 것으로 실행 12345678910111213141516#include cstdio> void main(){ Dog* dog1; dog1 = new Poodle; dog1.shouting(); //멍멍 Dog* dog2; dog2 = new Bulldog; dog2.shouting(); //왈왈 } cs dog1.shouting(); = 객체 dog1 에 shouting 이라는 메세지를 보낸다실제로는 객체 dog1 의 shouting() 함수 호출 그러니까 dog1 = new Poodle;이거는 실체를 만드는..
-
2015.09.11 [C] 2차원 배열 함수의 매개변수로 보내는 방법
많이 사용하는 2차원 배열을 함수로 보내는 방법 1234567891011121314151617#include void prn(int a[][4], int size); void main(){ int arr[3][4]; prn(arr, sizeof(arr)/sizeof(int));} void prn(int a[][4], int size){ printf("%d \n", a[1][1]);}\cs 3x4 크기의 배열을 arr[3][4] 로 선언하였습니다 13열의 void prn(int a[][4], int size) 이 부분을 보시면 a[][4]로 적혀있습니다 즉, 함수로 이동시킬때에는 2번째 배열크기는 변경하실 수 없습니다앞의 [3] 부분은 변경할 수 있습니다 왜냐하면 arr[3][4] 의 의미는 3개의 배열이..
-
2015.09.02 [C++] 싱글톤에 대한 정리
싱글톤 사용 방법과 싱글톤에 대한 정리 // 싱글톤 사용 방법 class A{private:static A* a;public:static A* Get_Instance(){if(a == NULL)a = new A; //A(); return a;} void func();} ///////////////////////////////////// //클래스 외부 void B::Func(){A* _a = A::Get_Instance(); //원본을 받아옴 _a->func();} 싱글톤은 언제 사용하는가?? 프로그램이 끝나기 전까지 계속 남아있어야할 때 (static) ex) Manager , scene... 장점 : 어디서든 원본을 불러낼 수 있다 만약 상속받는 여러개의 scene에 싱글톤을 사용하면전역변수로 계속 ..
-
2015.08.25 [C++] 함수로 주소값 전달하는 방법
일반적으로 get 함수를 통해 다른 객체 안에 있는 변수의 주소값을 전달해야하는 일이가끔 발생하는데 그때 주소값을 반환하고싶을때에는 반환형* 함수이름(){return &변수명} 이렇게 해주면 됩니다. &변수명을 통해 변수의 주소값이 리턴되고이 주소값은 포인터이므로 반환형이 포인터형인 것으로 이해할 수 있습니다
-
2015.08.17 [컴파일에러] LNK2001 에러 없애는 법 (static) 3
LNK2001 에러 없애는법 ! error LNK2001: "~~~" (? ~ @ ~ @@ ~ ) 외부 기호를 확인할 수 없습니다.error LNK1120: 1개의 확인할 수 없는 외부 참조입니다. 간혹 클래스 내부에 static 변수를 선언했을때 발생하는 오류입니다왜 저런 에러가 뜨냐면, 해당하는 스태틱변수를 찾을 수 없기 때문입니다. ///////// A.h ////////// class A{private:static int a;public:A();} //////// A.cpp /////////// A::A(){a = 10;} 이렇게 하면 위의 박스 에러가 뜹니다. 정적변수 static을 사용하였을 때는클래스 내부에 선언을 해주면 정의가 필요한데, 이 정의는 클래스 외부에서 정의가 되어야합니..
[C++] 메세지 패싱2015. 9. 17. 21:45
메세지 패싱이란 무엇인가
메세지 전달 (message passing)
객체지향 관점에서, 프로그램은 오브젝트에 message를 보내는 것으로 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <cstdio>
void main()
{
Dog* dog1;
dog1 = new Poodle;
dog1.shouting(); //멍멍
Dog* dog2;
dog2 = new Bulldog;
dog2.shouting(); //왈왈
}
|
cs |
객체 dog1 에 shouting 이라는 메세지를 보낸다
실제로는 객체 dog1 의 shouting() 함수 호출
그러니까
dog1 = new Poodle;
이거는 실체를 만드는 것
dog1.shouting();
이거는 shouting 이라는 메세지를 실체(dog1)에 전송한다
객체의 shouting 메소드가 요청되어 실행으로써 응답한다
=> 실제 구체적 동작과 관계없이 객체와 객체에 대한 상호작용 관점을 제공
출처
http://www.slideshare.net/plusjune/ss-46109239
http://sjs0270.tistory.com/169
'Language > C++' 카테고리의 다른 글
[C++] 템플릿 이것저것(정리중...) (0) | 2017.12.27 |
---|---|
[C] 디버깅 중 출력화면에 변수 출력하기 (0) | 2015.09.25 |
[C] 2차원 배열 함수의 매개변수로 보내는 방법 (0) | 2015.09.11 |
[C++] 싱글톤에 대한 정리 (0) | 2015.09.02 |
[C++] 함수로 주소값 전달하는 방법 (0) | 2015.08.25 |
[C] 2차원 배열 함수의 매개변수로 보내는 방법2015. 9. 11. 21:42
많이 사용하는 2차원 배열을 함수로 보내는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> void prn(int a[][4], int size); void main() { int arr[3][4]; prn(arr, sizeof(arr)/sizeof(int)); } void prn(int a[][4], int size) { printf("%d \n", a[1][1]); } \ | cs |
3x4 크기의 배열을 arr[3][4] 로 선언하였습니다
13열의
void prn(int a[][4], int size)
이 부분을 보시면 a[][4]로 적혀있습니다
즉, 함수로 이동시킬때에는 2번째 배열크기는 변경하실 수 없습니다
앞의 [3] 부분은 변경할 수 있습니다
왜냐하면 arr[3][4] 의 의미는
3개의 배열이 각각 4개의 배열을 가리킨다는 의미이기 때문입니다
그림으로 이해하면
이런 의미입니다!!!!
그러니까 가로로 누운 배열 부분은 변경할 수 있지만
그 배열들이 각각 가리키는 배열은 [4] 로 정해져있기 때문에
변경이 안됩니다
그래서 함수로 2차원 배열을 보낼때에는 2번째 배열의 크기는 상수로 명시해줘야
그에 해당하는 2차원 배열을 인자로 보낼 수 있습니다.
'Language > C++' 카테고리의 다른 글
[C] 디버깅 중 출력화면에 변수 출력하기 (0) | 2015.09.25 |
---|---|
[C++] 메세지 패싱 (0) | 2015.09.17 |
[C++] 싱글톤에 대한 정리 (0) | 2015.09.02 |
[C++] 함수로 주소값 전달하는 방법 (0) | 2015.08.25 |
문자열을 입력받고, 문자의 빈도수 계산하여 출력하기 (0) | 2015.05.29 |
[C++] 싱글톤에 대한 정리2015. 9. 2. 18:07
싱글톤 사용 방법과 싱글톤에 대한 정리
// 싱글톤 사용 방법
class A
{
private:
static A* a;
public:
static A* Get_Instance()
{
if(a == NULL)
a = new A; //A();
return a;
}
void func();
}
/////////////////////////////////////
//클래스 외부
void B::Func()
{
A* _a = A::Get_Instance(); //원본을 받아옴
_a->func();
}
싱글톤은 언제 사용하는가??
프로그램이 끝나기 전까지 계속 남아있어야할 때 (static)
ex)
Manager , scene...
장점 :
어디서든 원본을 불러낼 수 있다
만약 상속받는 여러개의 scene에 싱글톤을 사용하면
전역변수로 계속 남아있기 때문에
해제, 재할당의 번거로움이 사라진다
장단점 링크
http://jongyoungcha.tistory.com/11
'Language > C++' 카테고리의 다른 글
[C++] 메세지 패싱 (0) | 2015.09.17 |
---|---|
[C] 2차원 배열 함수의 매개변수로 보내는 방법 (0) | 2015.09.11 |
[C++] 함수로 주소값 전달하는 방법 (0) | 2015.08.25 |
문자열을 입력받고, 문자의 빈도수 계산하여 출력하기 (0) | 2015.05.29 |
문자열의 숫자을 더하고 출력하기 (0) | 2015.05.29 |
[C++] 함수로 주소값 전달하는 방법2015. 8. 25. 20:50
일반적으로 get 함수를 통해 다른 객체 안에 있는 변수의 주소값을 전달해야하는 일이
가끔 발생하는데
그때 주소값을 반환하고싶을때에는
반환형* 함수이름()
{
return &변수명
}
이렇게 해주면 됩니다.
&변수명을 통해 변수의 주소값이 리턴되고
이 주소값은 포인터이므로 반환형이 포인터형인 것으로 이해할 수 있습니다
'Language > C++' 카테고리의 다른 글
[C] 2차원 배열 함수의 매개변수로 보내는 방법 (0) | 2015.09.11 |
---|---|
[C++] 싱글톤에 대한 정리 (0) | 2015.09.02 |
문자열을 입력받고, 문자의 빈도수 계산하여 출력하기 (0) | 2015.05.29 |
문자열의 숫자을 더하고 출력하기 (0) | 2015.05.29 |
단어를 입력받고, 사전 순서대로 출력하기 (0) | 2015.05.29 |
[컴파일에러] LNK2001 에러 없애는 법 (static)2015. 8. 17. 19:19
LNK2001 에러 없애는법 !
error LNK2001: "~~~" (? ~ @ ~ @@ ~ ) 외부 기호를 확인할 수 없습니다.
error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
간혹 클래스 내부에 static 변수를 선언했을때 발생하는 오류입니다
왜 저런 에러가 뜨냐면, 해당하는 스태틱변수를 찾을 수 없기 때문입니다.
///////// A.h //////////
class A
{
private:
static int a;
public:
A();
}
//////// A.cpp ///////////
A::A()
{
a = 10;
}
이렇게 하면 위의 박스 에러가 뜹니다.
정적변수 static을 사용하였을 때는
클래스 내부에 선언을 해주면 정의가 필요한데, 이 정의는 클래스 외부에서 정의가 되어야합니다
///////// A.h //////////
class A
{
private:
static int a;
public:
A();
}
//////// A.cpp ///////////
int A::a = 10;
A::A()
{
//a = 10;
}
요렇게!
왜 이렇게 해줘야 하냐면
C++ 에서 static 변수는 객체기반이 아니라, 클래스 기반으로 생성되기 때문입니다
그래서 클래스 내부에 선언을 해놓으면, 메모리(데이터영역)에 이 변수가 할당이 되고,
이 클래스 기반으로 만들어진 객체들이 이 변수를 공유합니다.
만약에,
static 변수를 클래스 내부에 선언하고 생성자 내에서 초기화를 해준다고 하면
객체가 생성될때마다 리셋되어버립니다.
그래서 잘못된것..!
참고)
static 변수는 전역변수의 성질도 가지고있기때문에
main 함수에 들어가기 전에 할당이 됩니다.
컴파일 단계때, 번역을 하면서 클래스 내부에 static 변수가 있으면
먼저 할당하라고 명령문으로 적습니다.
해당 게시물은 아래 링크 게시물을
본인이 빨리 찾아볼 수 있도록 정리한 것입니다.
http://egloos.zum.com/kaludin/v/2461942
'[에러정리]' 카테고리의 다른 글
[Unity/Max3D] ImportFBX Errors: Time range (447394) for scale curve(s) on node 'bone name' on take 'animation clip name' larger than maximum allowed (100000). (0) | 2017.08.31 |
---|---|
[Unity 컴파일 에러] InitializeUnityExtensions: Must have a valid path for plugin[n] (0) | 2017.08.29 |
[런타임에러] 무한루프 일어날 경우 (0) | 2016.01.14 |
[컴파일에러] C2054 에러 발생 경우 (0) | 2015.08.12 |
[컴파일에러] LNK1129, LNK2019 해결법 (0) | 2015.07.14 |