본문 바로가기
반응형

c++21

c++ 상속(Inheritance) ●상속- 다른 클래스의 멤버를 해당 클래스의 멤버로 포함시키는 것이다. - 상속되는 클래스를 부모클래스,super클래스,base클래스라고 하고 상속받는 클래스를 자식클래스,sub클래스,derived클래스라고 한다. - sub클래스 객체를 생성하면 super클래스의 생성자도 같이 생성된다. ex) - super클래스의 멤버초기화는 멤버변수가 public이면 직접 접근 가능하지만 private로 선언되었으면 아래처럼 멤버 이니셜라이저로 초기화 한다. ●protected 멤버- protected 멤버는 private멤버와 같다. 다만 상속관계에서는 public와 같다. ex) ●상속을 사용하는 이유- 각각의 클래스에 중복되는 부분이 많을 경우, 공통되는 부분을 super클래스로 추상화하고, 이를 상속하면 클래.. 2013. 6. 23.
c++ static ●static 멤버- main함수가 호출되기 전에 메모리 공간에 올라가서 초기화된다. public으로 선언되면 객체 생성전에도 접근 가능하다. - static 멤버는 객체의 멤버로 존재하지 않는다. - static 멤버함수,변수는 클래스 함수, 클래스 변수라고도 표현한다. ex) ●static 사용 이유- static 함수,변수는 전역변수,함수와 비슷하다. - 예를 들어 어떤 전역 변수를 특정 클래스에서만 사용해야 하는데 전역 변수이기 때문에 다른 곳에서 접근될 위험이 있다. 이 전역 변수를 특정 클래스내에서만 접근 하도록 하면 프로그램이 좀더 안정적으로 될것이다. - 전역 변수,전역 함수는 기본적으로 절차지향 프로그래밍에서 사용되고 객체지향에서는 사용되지 않는다. 전역 변수,전역 함수 대신 static.. 2013. 6. 21.
c++ const ●const 쓰임- 변수 선언 앞에 붙어서 변수를 상수화 한다.ex)const int a=10;a=5; //컴파일 오류 - 포인터가 가리키는 데이터를 상수화 한다.ex)int n=10;const int* pN=&n;*pN=20; //컴파일 어류 - 포인터 선언할때 이름 앞에 붙어서 포인터 자체를 상수화 한다.(포인터가 가리키는 대상이 고정됨ex)int a=10;int b=20;int *const pA=&a;pA=&b; //컴파일 오류 ●상수화된 멤버변수의 초기화- 객체를 생성하면 멤버 변수가 초기화된다. 상수화된 멤버변수도 처음에 쓰레기값으로 초기화된다. const로 선언되었기 때문에 일반적인 방법으로는 이 값을 사용자가 원하는 값으로 변경할 수 없다. 이때 '멤버 이니셜라이저'라는 문법을 이용하면 co.. 2013. 6. 20.
c++ 복사생성자 ●복사생성자 - 자기 자신과 같은 형태(자료형)의 객체(자신의 클래스로 생성된 클래스)를 인자로 받는 생성자이다. - 형태는 아래와 같이 '클래스(const 클래스& 객체명){~~}' 이다. 반드시 '&'를 사용해서 레퍼런스로 인자를 받아야 한다. const는 전달된 인자의 내용을 변경하지 못하도록 한다. ex) ●디폴트 복사 생성자- 디폴트 생성자를 별도로 생성하지 않았을 경우 디폴트 복사생성자가 자동으로 생긴다. - 디폴트 복사 생성자는 멤버 변수 대 멤버 변수의 복사를 수행한다. ex) ●깊은 복사- 예를 들어 문자열을 복사할 경우, 실제로 문자열 변수에 저장되는 값은 문자열의 주소이다. 따라서 복사생성자에서 문자열의 값이 아니라, 주소값을 복사하게 된다.이를 막기 위해 직접 복사생성자를 정의해야한.. 2013. 6. 19.
c++ 클래스(class) 3 ●객체 배열- 말 그대로 객체를 배열의 형태로 선언한 것이다. ex) ●객체 포인터 배열- 객체를 가리키는 포인터로 구성되있는 배열이다. 저자이 대상이 객체이면 객체배열, 객체의 주소이면 객체포인터배열을 사용한다.ex) ●this 포인터- 자기 자신 객체를 가리킨다.ex) 2013. 6. 19.
c++ 클래스(class) 2 ●정보은닉- 객체 외부에서 객체 내의 멤버변수에 직접 접근하는 것을 허용하지 않고 객체 내의 변수는 private로 선언하고 여기에 접근하는 멤버함수를 public로 선언하는 기법을 정보은닉이라고 한다. - 아래 코드에서처럼 멤버변수는 private로 선언하고 private로 선언한 변수에 접근하는 멤버함수를 선언한다. - 일반적으로 멤버변수에 데이터를 입력하는 함수는 setter함수, 데이터를 가져오는 함수를 getter함수라고 한다.ex) ●캡슐화- 연관있는 데이터와 함수를 하나의 클래스로 만드는 것이다. - 사용,수정,삭제 등 유지보수의 편의를 위해 하나의 클래스로 만든다. - 개념은 간단하지만 캡슐화를 잘 하려면 많은 경험과 객체지향에 대한 이해,공부가 필요하다. ●생성자- 객체 생성과 동시에 초.. 2013. 6. 17.
c++ 클래스(class) 1 ●클래스=멤버 변수 + 멤벼함수 ●클래스를 이용해서 만든 변수를 객체(Object)라고 한다. 객체를 만드는 것을 객체화 또는 인스턴스화라고 표현한다. ●접근 제어- public - 클래스 외부에서도 접근 가능하다. - private - 클래스 내부에서만 접근 가능하다. 클래스 내부에서 따로 접근 제어를 선언하지 않으면 default로 private으로 인식한다.ex)calss Abc{private: int a;public: setter(int k){ a = k; }}; ●일반적으로 클래스를 만들때 클래스, 변수, 함수 선언은 헤더파일에 하고 멤버 함수 정의는 cpp파일에 구현한다.ex)Abc.h#includeclass Abc{void a();void b();}; Abc.cpp#include "Abc.h.. 2013. 6. 16.
c++ 레퍼런스(Reference) ●레퍼런스(Reference)- 'int &a' 처럼 &를 사용해서 변수를 생성는 것이 레퍼런스이다.('&'는 사용되는 위치에 따라 주소값을 반환 할수도 있고 레퍼런스를 선언할때 사용할 수도 있다.) - 변수는 메모리 공간에 할당된 이름을 의미한다. 레퍼런스는 이름 있는 메모리 공간에 하나의 이름을 더 붙여주는 것이다. - 레퍼런스와 변수는 생성되는 방법만 다르고 일단 생성되고 나면 동일한 것이다. - 아래 두 함수는 동일한 의미를 지닌다ex)int function(){ int a; int &b=a; return a;} int function(){ int a; int &b=a; return b;} ●레퍼런스 선언- 변수는 새로운 메모리 공간에 이름을 부여하지만 레퍼런스는 반드시 이미 이름을 지니고 있는 .. 2013. 6. 13.
c++ 네임스페이스(namespace) ●namespace- 특정영역를 지정하고 이름을 붙여준 것이다.- 서로 다른 부분에서 똑같은 함수 이름이 선언되어서 에러가 나는 것을 막아준다. ●using- namespace안의 함수를 사용할때마다 namespace::function 을 쓰면 불편하다.- using을 사용해서 namespace를 선언하면 일일히 namespace:: 를 쓰지않아도 된다. 2013. 6. 12.
c++ 매크로 함수, 인라인(inline) 함수 ●매크로 함수- 함수 호출 문장이 함수 몸체 부분으로 치환된다.- 전처리기에서 처리하기 때문에 속도가 빠르다.- 복잡한 연산보다는 간단한 연산을 사용할 때 좋다.ex)#define AAA(x, y) ((x)*(y)) ●inline 함수- 일반적인 함수를 정의하는 과정에서 앞에 'inline'를 붙여주면 된다.- inline함수는 컴파일러에 의해 처리된다.- 호출 스택을 생략해서 속도가 빨라지지만, 코드가 길어질 경우 속도가 느려질 수도 있다.- 컴파일러에 따라 inline이 성능 향상에 해가 된다고 판단하면 inline을 무시하고 일반적인 처리를 할 수도 있다. 2013. 6. 12.
c++ 디폴트 매개 변수 ●디폴트 매개 변수- 매개 변수를 선언할때 값을 설정하는 것이다. 함수를 호출할 때 매개 변수 인자로 아무것도 입력하지 않으면 디폴트 매개변수로 선언한 값을 인자로 간주한다.ex) int function(int a = 1) {~~} ●디폴트 매개 변수와 함수와 매개 변수가 없는 함수 동시 선언은 안된다. 2013. 6. 12.
c++ 함수 오버로딩 ●함수 오버로딩- 함수 이름이 같고 매개변수의 타입, 개수가 다른 함수를 정의한다.단, 함수이름이 같고 매개변수의 타입, 개수도 같고 함수의 리턴타입만 다른 함수의 선언은 허용되지 않는다. ●함수 이름이 같고, 리턴타입이 같지만 매개변수의 타입,개수가 다름 ●함수 이름은 같지만, 리턴타입과 매개변수 타입,개수가 다름 ●아래와 같이 함수 이름,매개변수의 타입,개수가 같고 리턴타입만 다를 경우 오버로딩이 되지 않고 에러가 발생한다. 2013. 6. 11.
c++ 로드, PDB 파일을 찾거나 열 수 없습니다. ●로드, PDB 파일을 찾거나 열 수 없습니다. - 비주얼C++에서 디버그를 실행하면 이렇게 나오면서 창이 나오고 바로 꺼진다. 'a.exe': 'ImageAtBase0x200000' 로드, 포함/제외 설정으로 로드가 비활성화되었습니다.'a.exe': 'ImageAtBase0x200000' 언로드'a.exe': 'C:\Windows\System32\shunimpl.dll' 로드, PDB 파일을 찾거나 열 수 없습니다.'a.exe': 'C:\Windows\System32\SortWindows6Compat.dll' 로드, PDB 파일을 찾거나 열 수 없습니다.'a.exe': 'C:\Windows\System32\imm32.dll' 로드, PDB 파일을 찾거나 열 수 없습니다.'a.exe': 'C:\Windo.. 2013. 6. 11.
c++ visual c++로 프로젝트 시작하기 2013. 6. 11.
cocos2d-x sprintf이용해서 점수 표시 ●sprintf- 메모리에 출력한다.- sprintf(문자배열명, "출력문자와 자료형(ex.%d)", 입력 데이터); ●예제- HelloWorldScene.cpp #include "HelloWorldScene.h" using namespace cocos2d; CCScene* HelloWorld::scene(){ CCScene *scene = CCScene::create(); HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene;} bool HelloWorld::init(){ if ( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) ) { return false; }//.. 2013. 6. 9.
cocos2d-x 액션2 ●CCSequence- 액션의 순서를 정하고 순차적으로 실행한다. void HelloWorld::doAction(CCObject* pSender){//액션 정의CCActionInterval* action1=CCMoveTo::create(2,ccp(100,200));CCActionInterval* action2=CCRotateBy::create(2,90);CCActionInterval* action3=CCScaleTo::create(2, 2.0); CCFiniteTimeAction* seq=CCSequence::create(action1, action2, action3, NULL); pMan->runAction(seq);} ●CCSpawn- 등록된 모든 액션을 동시에 시행한다. void HelloWorld.. 2013. 5. 28.
변수명과 메서드명 작성 규칙 ●자기가 만든 프로그램이라도 몇 주만 지나면 다 까먹는다. 딱 정해진 규칙은 없지만 가독성과 프로그램 흐름을 기억 위해 될수 있으면 다음의 규칙을 따르는게 좋다. ●변수명 작성 규칙 - 변수명은 될 수 있으면 의미를 가진 단어를 사용한다. - 첫글자는 소문자로 시작한다. - 상수는 대문자를 사용한다. - 동사와 명사가 섞인 변수명을 작성할 때는 동사를 먼저 적는다. - boolean형의 변수는 접두어로 is나 can을 붙인다. - 반복문 등의 내부에서 사용하는 변수는 i,j,k를 사용한다. - class전체에 사용되는 class형의 변수는 접두어로 m이나 g를 붙인다. - 변수명 오른쪽에 그 변수가 무슨 의미인지 주석처리한다. ●메서드명 작성 규칙 - 하나의 메서드가 길어져 전체를 한 화면에 보기 곤란한.. 2012. 6. 17.
c++ 기본 문법 정리4 ●템플릿 함수 - 인수나 반환값의 형을 모호한 상태로 정의하는 함수. 템플릿 함수의 기능을 사용하면, 복수의 형에 대응하느 함수를 만들 수 있다. 컴파일러는 템플릿 함수를 호출하는 부분을 발견하면, 이것들을 구체적인 함수로 만든다. ex) template T Aaa(T a, T b){ //템플릿 인수(T) 부분에 int형이나 double등 자료형이 치환된다. T buf; ~~ } int a=100, b=200, c; c=Aaa(a, b); //템플릿 인수가 int로 치환 ●템플릿 함수의 이용 - 템플릿 함수를 이용하면 내용은 거의 동일하지만 형이 다른 함수를 하나로 만들 수 있다. ●템플릿 클래스 - 사용하는 형을 모호한 상태로 정의하는 클래스. 템플릿 클래스 기느을 사용하면 복수의 형에 대응하는 클래스.. 2012. 2. 17.
c++ 기본 문법 정리3 ●new 연산자 - 오브젝트를 동적으로 생성할 때 사용 ex) A *a; a=new A; A *a=new A; ●delete 연산자 - new연산자로 확보한 메모리는 delete연산자로 해체해야한다. ex) A *a=new A; delete a; ●new, delete를 이용해서 int형 등의 메모리 확보, 해체 ex) int *a=new int; delete a; //malloc,free를 쓸경우 int *a=(itn *)malloc(sizeof(int)); free(a); ●malloc()함수보다 new연산자를 사용하는 것이 간단하기 때문에 권장 ●new연산자를 이용한 배열용 메모리 확보, 해체 ex) a=new[10]; //[]안에 숫자 적어야 함 delete []a; //delete뒤에 '[]'기.. 2012. 2. 17.
c++ 기본 문법 정리2 ●c언어에서는 배열사이즈를 정의할 때 상수선언을 #define으로 했지만, c++에서는 const로 할 수 있다. 가능한 const를 사용하는게 좋다 ex) c언어 #define B 10 int main(){ int b[B]; } c++ int main(){ const int B; int b[B]; } ●함수의 디폴트 인수 설정 - 거의 매번 같은 값을 가지지만 가끔씩 변경해야할 경우에 사용하면 편리 ex) 프로토 타입에서 설정 double A( int a=1, double b=3.1); 함수 정의에서 설정 double A( int a=1, int b=3.1){ ~~ } ●디폴트 인수 설정된 함수 호출 ex) double area; area=A(); //아무 것도 없으면 디폴트인수로 된다 area=A(1.. 2012. 2. 16.
c++ 기본 문법 정리1 ●c++은 객체지향 프로그래밍 언어이다 ●확장자는 '.cpp' 사용 ●c++ 기본구조 ex) #include int main(){ std::cout 2012. 2. 16.
반응형