본문 바로가기

C++문법 공부

(16)
맴버 함수 사용시 const 키워드의 사용 객체 지향 프로그래밍에서 반드시 알아야 할 3가지 const의 사용법에 대해서 알아 보겠습니다. 맴버 함수에 const 가 사용되기 시작하면서 한번 정리하고 갈 필요성을 느꼈습니다. 첫번째, 함수 선언 맨 끝에 const를 붙이는 경우 대표적인 함수로 접근자로 쓰이는 Get 함수가 있습니다. class Point { private: int x, y; public: Point() :x(0), y(0){} Point(int argx, int argy) { x = argx; y = argy; } void SetX(int arg) { x = arg; } void SetY(int arg) { y = arg; } int GetX() const { return x; } int GetY() const { return ..
2차원 배열과 포인터의 이해 초보자를 위한 C++ 200제(박준태 저) 85번 예제 입니다. #include using namespace std; void Func1(int arr[2][2]) { arr[0][0] = 1000; } void Func2(int arr[][2], int row) { arr[row - 2][1] = 2000; } void Func3(int* arr, int row, int col) { *((arr + row - 1) + col - 1) = 3000; } int main() { int data[2][2] { { 1, 2 }, {3, 4} }; Func1(data); Func2(data, 2); Func3(*data, 2, 2); cout
함수 템플릿 새로운 용어가 나오면 역시 단어뜻부터 살펴 봐야겠죠 단어의 의미는 본을 뜰 수 있는 형판, 틀과 같은것을 의미 합니다. 그림을 그릴때는 대고 따라 그릴 수 있는 어떤 틀이 되겠네요. C++은 혼합형 언어라고 이야기 합니다. 개발 방식 (패러다임)에 따라 분류 했을 때 그러합니다. 멀티패러다임이라고도 합니다. C언어를 계승해서 발전된 형태이기 때문에 C언어에서 사용되던 패러다임인 절차형 프로그래밍, 함수형 프로그래밍도 사용 가능하고, 객체지향 패러다임도 사용할 수 있습니다. 이런 패러다임 중에서 타입에 관계없이 동작하는 함수와 클래스를 작성하는 기법을 일반화 기법이라고 하는데, 이 일반화 기법을 템플릿을 통해서 효율적으로 구현할 수 있게 됩니다. 먼저 템플릿을 사용하지 않고 일반화를 구현하는 방법이 어떤 ..
소멸자의 virtual 선언 저번 시간에 virtual의 개념에 대해서 학습 했습니다. 이번에는 소멸자(Deconstructor) 를 가상으로 선언하는 이유에 대해 예제를 통해서 알아 보겠습니다. #include class Food { public: Food() { printf("Food 가 생성 되었습니다.\n"); } ~Food() { printf("Food가 소멸되었습니다.\n"); } }; class Chicken : public Food { public: Chicken() { printf("Chicken이 생성되었습니다.\n"); } ~Chicken() { printf("Chicken이 소멸되었습니다.\n"); } }; int main() { Food* pF; pF = new Chicken; delete pF; } 위 예제..
가상함수 Virtual과 오버라이딩 1. 다형성이란? 가상함수 Virtual Functions 은 객체지향 프로그래밍에서 다형성을 완성시켜주는 개념입니다. 다형성(polymorphism)이란 한자의 뜻을 풀자면 형태가 다양하다는 뜻이 되겠습니다. 여기서 형태는 당연히 자료형, 즉 객체가 되겠구요 객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 - (codestates.com) 객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 - 객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위 www.codestates.com 국내에서 객체 지향의 개념을 이것보다 잘 정리해 놓은사이트는 찾..
포함 포함 관계는 상속 관계와 같이 클래스 간에 관계를 설정하는 방법 중 하나입니다. 어떤 객체가 다른 객체를 포함하고 있다면 그 관계를 포함(Containment) 이라 합니다. 포함과 상속의 구분 포함과 상속은 비슷하면서도 다릅니다. 본질적으로 다른 객체의 맴버를 편하게 가져오기 위해 만든 개념입니다. 포함은 Has 관계다. A가 B를 가지고 있다면 포함을 사용합니다. 상속은 Is 관계입니다. A가 B라면 상속을 사용합니다. 예를 몇가지 실생활에서 들어 보겠습니다.. 컴퓨터와 CPU는 포함 관계 입니다. 마우스와 스위치는 포함관계 입니다. 인간과 동물은 상속 관계 입니다. 파인애플과 과일은 상속 관계 입니다. 콜오브듀티와 게임은 상속 관계 입니다. 자동차와 엔진은 포함 관계입니다. 다르게 표현하자면 A가 ..
new 연산자 C에서 메모리를 동적할당 할 때, 그러니까 HEAP 영역을 사용 할 때 malloc 과 free 함수를 사용했습니다. C++는 함수가 아니라 연산자를 사용하여 메모리를 할당 합니다. (new/delete) new 가 함수가 아닌 연산자이기 때문에 헤더파일이 별도로 필요하지 않습니다. 포인터 변수 = new 자료형(초기값); new 연산자의 사용은 일반적으로 위와 같이 이루어 집니다. 자료형에는 당연하게도 객체가 올 수 있습니다. 초기값을 생략하게 되면 쓰레기값을 가집니다. 할당에 실패하면 NULL값을 반환합니다. 즉, NULL포인터가 됩니다. 해제 할 때는 delete 연산자를 사용합니다. #include using namespace std; int main() { int* newint; string* ..
typedef를 클래스 안에서만 맴버로 사용하기 typedef 도 enum과 마찬가지로 클래스 맴버로 사용하면 객체 내에서만 타입을 재정의 하는데 사용할 수 있다. 다음은 typedef를 맴버 내에서 정의한 인터페이스 파일이다. #ifndef POINT_H #define POINT_H // Point 클래스를 정의한다. class Point { public: enum { MIN_X = 0, MAX_X = 100, MIN_Y = 0, MAX_Y = 100 }; typedef int COOR_T;//좌표의 타입 int의 타입을 COOR_T로 재정의 했다. //맴버 함수 void Print() const; void Offset(COOR_T x_delta, COOR_T y_delta); void Offset(const Point& pt); //생성자들 Poi..