C++ Programming (16) 썸네일형 리스트형 유닛 추상클래스 스타크래프트(StarCraft)라는 시뮬레이션 게임을 보면 아주 많은 유닛들이 등장한다. 갑자기 특정 게임 얘기를 꺼내 이 게임을 모르는 사람들은 당황스러울지도 모르겠지만 믿을만한 통계에 의하면 이 책을 읽는 사람의 96%는 스타크래프트를 해 본 적이 있고 나머지 3.8%는 해 보지는 않아도 게임을 알고는 있다고 하니 예를 들어도 무난할 것 같다. 게임에 등장하는 유닛들을 특성별로 클래스화한다면 아마 다음과 같은 계층이 만들어질 것이다. 실제로는 더 많은 중간 계층이 존재하겠지만 간단하게 개념적인 계층을 만들어 보자.모든 유닛들은 특징별로 뛰어 다니는 것들, 날아다니는 것들, 땅속으로 숨을 수 있는 것들로 일차 분류할 수 있다. Running 클래스에 속한 마린과 탱크는 땅 위를 아장 아장 걸어다니고 날.. 추상클래스 하나 이상의 순수 가상 함수를 가지는 클래스를 추상 클래스(Abstract Class)라고 한다. 추상 클래스는 동작이 정의되지 않은 멤버 함수를 가지고 있기 때문에 이 상태로는 인스턴스를 생성할 수 없다. 추상 클래스를 사용하는 실제 프로젝트의 예를 들어 보자. 워드 프로세서의 문서를 분석하는 기능을 캡슐화하여 클래스로 만들고자 한다. 이 클래스는 문서를 순서대로 읽으면서 문서에 속한 문단, 도표, 그림 등등의 요소를 추출해 내며 이렇게 분석한 결과는 출력, 인쇄, 다른 문서 형식으로의 변환, 검색 등에 사용될 것이다. 많이 사용되는 아래한글과 워드 문서에 대한 분석 클래스를 작성한다면 아마도 다음과 같은 멤버 함수의 목록이 만들어질 것이다.문서라는 복잡한 대상을 분석하기 위해서는 메모리도 필요할 것이.. 가상함수 순수가상함수 가상함수가상 함수는 파생 클래스가 안전하게 재정의할 수 있는 함수이다. 만약 상속 관계가 아니라면 가상 함수를 선언할 필요가 없으므로 가상 함수는 상속 계층내에서만 의미가 있으며 파생 클래스에게 재정의 기회를 주기 위해 존재하는 것이라고 할 수 있다. 그러나 가상 함수를 반드시 재정의해야만 하는 것은 아니다. 기반 클래스의 동작을 그대로 쓰고 싶으면 단순히 상속만 받고 변경할 필요가 있을 때만 재정의하면 된다. 기반 클래스가 가상 함수를 만드는 이유는 혹시라도 재정의하고 포인터로 호출할 때를 대비한 것이다. 가상 함수는 재정의해도 되는 함수이지 반드시 재정의해야 하는 함수는 아니다. 순수가상함수순수 가상 함수(Pure Virtual Function)는 파생 클래스에서 반드시 재정의해야 하는 함수이다. 순.. 연산자 오버로딩 멤버 연산자 함수원래의 피연산자보다 인수의 개수가 항상 하나 더 적은데 +는 이항 연산자이므로 두 개의 피연산자를 취하지만 멤버 연산자 함수의 인수는 하나만 있으면 됨.이 함수를 호출하는 객체인 *this가 암시적인 좌변이 되며 나머지 우변이 될 대상만 인수로 전달받음.나 자신(this)과 연산될 대상이 누구인가만 알면 되는 것.만약 ++ 단항 연산자를 멤버 연산자 함수로 오버로딩한다면 호출하는 객체 자체가 피연산자가 되므로 인수는 필요 없음. =, (), [], -> 연산자들은 반드시 멤버 연산자 함수로만 만들어야 함. 전역 연산자 함수전역 연산자 함수는 원래의 피연산자와 같은 수의 인수를 가짐. +연산자가 이항 연산자이므로 operator+ 전역 연산자 함수는 두 개의 인수를 취하고 ++ 연산자는 단.. inline __inline __forceinline inline인라인 함수는 프로그램의 실행 속도를 높이기 위해 추가된 기능이며 C언어의 매크로 함수와 비교됨 일반 함수와 인라인 함수의 차이점일반 함수의 경우일반 함수의 호출 방법은 프로그램 실행 중 함수를 실행해야 한다면 해당 함수의 주소로 점프시켰다가 함수의 처리가 종결되면 다시 원래의 자리로 돌아오는 것으로 앞뒤로 점프를 수행하고 점프할 위치를 기억하려면 함수를 사용하는데 시간이 많이 걸림 인라인함수의 경우인라인 함수는 컴파일된 함수 코드가 프로그램의 코드 안에 직접 삽입되어짐즉, 컴파일러가 함수를 호출하는 대신 그에 대응하는 함수 코드로 대체한다는 것을 의미하며 함수 호출없이 삽입된 함수 코드를 그 자리에서 처리하므로 해당 함수를 수행하기 위해 프로그램이 다른 주소로 점프했다가 되돌아 올 필요가 없.. (오류해결법) intellisense 추가정보가 없습니다 오류내용intellisense 추가정보가 없습니다솔루션으로 프로젝트를 관리하던 도중 스코프연산자가 안 먹힐 때 솔루션 ncb 파일을 삭제 후 다시 실행하면 됨 MSDN이 제시하는 해결방법프로젝트 디렉터리의 루트에 있는 비컴파일 브라우저 파일(.ncb)이 읽기 전용이거나 손상된 경우 IntelliSense 정보를 사용할 수 없음이 문제를 해결하려면 다음 작업을 수행솔루션을 닫습니다..ncb 파일을 삭제합니다.솔루션을 다시 엽니다.솔루션을 다시 열면 .ncb 파일이 새로 만들어집니다. cout 출력 포맷 퍼온 주소 : http://repilria.tistory.com/243 cout은 ostream의 메서드이며, ostream 클래스는 ios 클래스로부터 상속되고, ios 클래스는 ios_base 클래스로부터 상속된다. ios_base 클래스는 출력 상태를 서술하는 정보를 가지고 있다. 1. 진법 변경 Manipulator를 사용하여 화면에 정수를 출력할 때 사용되는 진법을 제어하며, ios_base의 멤버 함수를 사용하여 필드 폭과 소수점 아래 자릿수를 제어할 수 있다. 즉, hex(cout)과 같은 함수 호출은 cout 객체의 수치 출력을 16진수로 설정하며, 다른 진법으로 다시 설정될 때 까지 모든 정수들을 16진법으로 출력한다. 또한 cout 클래스 OOP소프트웨어 위기 기존 절차식 프로그래밍의 방법의 낮은 생산성이 문제가 됨. 절차식 프로그래밍은 간결하고 빠른 실행 파일을 만들기는 하지만 규모가 커지면 개발뿐만 아니라 유지 모수에 한계를 드러냄. 그래서 대안으로 여러 가지 개발 기법들이 제시되었는데 그 중에서 가장 탁월한 기법으로 인정받은 것이 바로 절차가 아닌 데이터를 중심으로 개발을 진행하는 객체 지향적 프로그래밍(Object Oriented Programming) 방식임OOP의 특징캡슐화표현하고자 하는 자료와 동작을 하나의 단위로 묶는 것이며 이렇게 묶어 놓은 것을 객체라고 함 정보 은폐객체는 자신의 상태를 기억하기 위한 속성과 속성을 관리하는 동작을 정의함 추상화현실의 사물을 객체로 표현하기 위해서는 이 사물이 어떤 특징을 가지며 어떤 동작.. 이전 1 2 다음