전체 글
[C++] 접근지정자
1. 접근지정자 (access specifiers) struct Book { int code; int price; }; int main() { Book b; b.price = -1000; } 위와 같은 코드가 있다고 해보자. Book이란 구조체는 책의 code번호와 가격 정보를 들고있다. 사용자는 main()함수에서 책을 만들고 책의 가격을 바꾸려고 하는데 사용자가 실수로 '-'를 넣었다고 해보자. 가격은 음수가 될 수 없는데 이러한 실수를 막으려면 어떻게 해야 할까? - 멤버 데이터를 외부에서 직접 접근하면 객체가 잘못된 상태를 가지게 될 수 있다. - 접근지정자를 통해 멤버 함수를 통해서만 멤버 데이터를 변경할 수 있게한다. => 멤버 함수는 인자의 유효성 여부를 조사 할 수 있다. struct Bo..
[C++] 객체지향 프로그래밍의 개념(2)
1. 변수와 객체 (variable vs object) #include int main() { int n = 0; // 변수 n = 10; std::stack s; // 객체 s.push(10); s.push(20); int n2 = s.top(); s.pop(); } - 변수 (Variable) => 변하는 수 => 메모리의 특정 위치를 가르키는 이름 => 변수를 사용하면 메모리에 값을 읽거나 쓸 수 있다. => 언어가 제공하는 기본 타입(primitive type)의 인스턴스 - 객체 (Object) => 메모리를 할당하고 자신을 스스로 초기화 한다. => 상태와 동작을 가지고 있는 존재 => 객체를 사용하면 해당 객체가 제공하는 다양한 서비스를 사용할 수 있다. => 사용자 정의 타입(User De..
[C++] 객체지향 프로그래밍의 개념(1)
1. 객체지향 프로그래밍(OOP : Object Oriented Programming) // 복소수 2개를 더하고 싶다. ? add(double ar, double ai, double br, double bi) { double sr = ar + br; double si = ai + bi; return ? } int main() { double xr = 1, xi = 1; // 1 + 1i double yr = 2, yi = 2; // 2 + 2i add(xr, xi, yr, yi); } 위의 코드는 복소수(실수+허수의 형태)를 더하는 코드이다. 위에서 add함수로 인자를 4개 넣고 결과 값을 받고 싶은데, 함수의 타입과 리턴은 어떻게 해야 할까? // 복소수 2개를 더하고 싶다. void add(doub..
[C++] 동적 메모리 할당, nullptr
1. 동적 메모리 할당 #include int main() { int* p1 = (int*)malloc(sizeof(int)*10); free(p1); // C언어에서의 메모리 할당 int* p2 = new int; // int 한 개, 4byte delete p2; // C++에서의 메모리 할당 int* p3 = new int[10]; delete[] p3; int* p4 = new int[10][2]; delete[] p4; } - C언어 => malloc으로 할당하고 free로 해지한다. => C언어에서는 캐스팅이 필요 없지만, C++에서 malloc사용시 반환되는 주소는 원하는 포인터 타입으로 캐스팅 해야 한다. - C++ => new로 할당하고 delete로 해지한다. => new가 반환한 주소..