본문 바로가기

공부

C++ 객체지향 프로그래밍 Chapter 23 다형성과 가상함수 가상함수가 쓰이는 시기는 언제인가. ??? Shape 클래스와 자식 클래스들. 책 페이지 667 의 코드[단일 실행이 가능함] 책 내의 코드 우측에 쓰여있는 문장이나 굵은 글씨로 된 것 들을 모아두었다. 이 코드는 가상함수가 쓰인것이 아니다. #include using namespace std; // 일반적인 '도형'을 상징하는 클래스 class Shape {//Shape 클래스의 정의, 원 , 사각형 같은 일반적인 도형들이 public://공통적으로 가지는 속성들을 여기에 정의한다. 자식 클래스들은 void Move(double x, double y);//이 멤버들을 자동적으로 상속받게 된다.// void Draw() const;//모든 도형 클래스들은 자신을 움직이거나, 그리는 함수가 필요하다. Sh.. 더보기
C++ 객체지향 프로그래밍 Chapter 22 상속과 포함 상속과 포함 이래놓고 포함부터 가르치는 이유는 모르겠다.[제목과 순서의 미스매치.] ----------------------------- Rect::Rect(int left, int top, int right, int bottom) : _topLeft( left, top), _bottomRight( right, bottom) //초기화 리스트, {// ㄴ _topLeft 객체의 생성자를 호출한다. ㄴ _bottomRight 객체의 생성자를 호출한다. // 생성자의 코드 } -------------- 초기화 리스트로 객체의 생성자를 지정하는 코드 생성자의 실행 순서와 소멸자의 실행 순서는 다음과 같다 생성자의 경우 1. 밖의 생성자에서 쓰이는 속에있는 함수들이 먼저 실행된다. 2. 후에 밖의 생성자에서 쓰.. 더보기
C++ 객체지향 프로그래밍 Chapter 21 클래스와 객체 - 2 헤더 파일을 사용한 클래스의 예제. 각 파일별 코드가 있다. 일단은 main.cpp[메인이지만 이름은 아무렇게나 해도 상관없음.] #include "point.h" int main() { // 객체를 생성한다. Point pt; pt.SetX(50); pt.SetY(50); // pt의 내용을 출력한다. pt.Print(); return 0; } point.cpp #include "point.h" #include using namespace std; Point::Point(const Point& pt) { x = pt.x; y = pt.y; } Point::Point(int initialX, int initialY) { SetX(initialX); SetY(initialY); } Point::Point(.. 더보기
C++ 객체지향 프로그래밍 Chapter 21 클래스와 객체 설명이 좀 없는 단어에 대한 글 멤버 변수 / 멤버 함수 / 생성자 / 접근자 / 소멸자 이게 뭘뜻하는가 클래스는 클래스 객체 라고 하는 흔히 쓰이는 글쓰기 양식이나 서식 같은 것이다. 여기서 멤버 변수 란 해당 클래스 내에서 정의되고 사용되는 변수. 멤버 함수란 해당 클래스 내에서 사용되는 함수[함수의 내용을 정의해주어야 작동한다] 생성자 란 클래스 내부의 멤버 변수에 관련된 값들에 변화를 줄 수 있는 함수+ 인자 가 묶인 외부에서 호출 가능한 함수. 접근자 란 클래스 내의 접근 권한에 따라 외부에서 접근이 불가능한 것을 가능하게 해주는 기능 소멸자 란 따로 메모리를 해제하지 않아도 사용된 메모리를 해제해주는 코드를 작성하여 자동으로 메모리를 해제하게 하는 기능 을 말한다. 대충 그려본 그림 \\\\\.. 더보기
MFC 더블 버퍼링 [ Double Buffering ] 책의 608 페이지 에 있는 내용으로 프로젝트명은 RedrawDemo로 작성한다. 윈도우의 깜박임을 제거하는 최선의 방법은 더블 버퍼링 이다. 더블 버퍼링은 화면 DC에 직접 출력하는 것이 아닌 화면 DC와 호환이 되는 메모리 DC를 만들어서 모든 그리기 작업이 끝난 값을 집어넣어둔 후 메모리 DC의 내용을 화면 DC로 복사하는 기법이다. 이렇게 하면 화면의 크기를 변경하더라도 흰색 깜박임이 발생하지 않게 된다.[흰색으로 초기화 시키는게 아닌 메모리 DC의 내용을 가져오기만 하기 때문에.] 전에 쓴 OnPaint()함수의 코드에서 CPaintDC dc(this); 를 CBufferDC dc(this); 로 변경하고 CBufferDC 클래스를 프로젝트에 인클루드 하면 간단히 더블 버퍼링을 구현할 수 있다... 더보기