Programming 4

포인터

포인터는 데이터를 그 자체로 저장하는 것이 아니라 저장하고 있는 메모리의 주소를 가지고 있다. 포인터가 지정하는 주소에 아무 데이터가 없다면 NULL이라고 표시된다. 프로그램을 짜다보면 포인터가 허용되지 않은 주소에 메모리를 참조할 때가 있는데 이를 "dangling pointer"라고 한다. Storage Allcation int a, *iptr, *jptr, *kptr; iptr에 &a를 대입하게 되면 iptr가 a 변수의 메모리 주소를 참조하게 된다. 그리고 jptr = iptr를 하게 되면 jptr에 저장된 메모리 주소도 a의 메모리 주소가 되게 된다. 3번째로 *jptr=100을 하게 되면 jptr가 참조하고 있는 변수에 100을 저장하게 되므로 결국 a 변수에 100이 저장되게 된다. 따라서 ..

객체지향 프로그래밍 : 상속

상속(Inheritance)이란 자식 클래스가 부모 클래스의 속성을 그대로 물려 받을 수 있는 기능을 말한다. 객체 지향 프로그래밍의 주요한 기능중에 하나이고 이를 잘 활용하면 소스코드의 재사용성을 높여준다. 부모 클래스의 특성을 내려받는 것은 부모 클래스가 가지고 있는 멤버 변수, 멤버 메서드, 생성자와 소멸자 등이 있다. Animal 클래스 // Animal.h class Animal { public: Animal(int age); private: int mAge; }; // Animal.cpp #include "Animal.h" Animal::Animal(int age) :mAge(age) { } Cat 클래스 // Cat.h class Cat : public Animal { public: cat(..

객체지향 프로그래밍 : 생성자

클래스가 정의되어 있고 객체를 생성하게 되면 초기화 과정이 필요하게 된다. 특히 클래스 내부에 있는 멤버함수의 경우 메모리는 할당되지만 JAVA와 같이 초기화 과정이 없기 때문에 멤버함수의 접근이 요구되는 프로세스가 있다면 먼저 초기화를 수행해줘야 한다. 초기화를 할때 아래 그림과 같이 대입하는 방법과 초기화 리스트라는 방법이 있다. - 대입하는 방법 class Vector { public: Vector() { mX = 0; mY = 0; } private: int mX; int mY; } - 초기화 리스트 class Vector { public: Vector() :mX(0) ,mY(0) { } private: int mX; int mY; } 멤버 변수를 대입없이 초기화 상수나 참조변수도 초기화 가능 기..

객체지향 프로그래밍 : 클래스와 객체

정의 : Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code: data in the form of fields, and code, in the form of procedures. (wikipedia) 객체지향 프로그래밍이란 사람이 세상을 인지하는 방식과 유사한 관점으로 어떠한 객체를 바라볼 때 객체에 포함된 기능들을 함께 다루기 위한 방법이다. C++이외에도 JAVA, C# 등의 언어에서도 지원이 되지만 이번에는 C++에 대해서 정리하려고 한다. C++과 JAVA에서 지원되는 OOP 요소 ( 빨간색은 C++에서 되는 요소) 클래스 ..