2019/10/15

4

C++ 프렌드(friend)

데이터 은닉을 통하여 멤버 함수를 통해서만 private 데이터 멤버에 접근이 가능했습니다. 하지만 이 제약이 엄격하여 특정 프로그래밍 문제를 해결하지 못하는 경우가 있습니다. 그래서 나온 게 프렌드라는 겁니다. 프렌드는 세 가지 형태로 사용됩니다. 프렌드 함수 프렌드 클래스 프렌드 멤버 함수 프렌드가 사용되어야 할 때 클래스 멤버 함수는 아니지만 해당 클래스의 데이터 멤버에 접근해야 할 때 필요합니다. 기본적으로 데이터 은닉에 의하여 외부에서 데이터 멤버는 접근할 수 없게 됩니다. 하지만 프렌드는 클래스 멤버 함수와 동일한 접근권한을 가지게 됩니다. (말 그대로 프렌드는 친구라는 뜻입니다.) 지나가는 사람보고 개인정보 좀 알려달라고 할 수 없으니, 친구를 맺어 개인정보를 알려달라고(접근) 할 수 있습니..

프로그래밍/C++ 2019.10.15 Plorence

C++ 연산자 오버로딩(operator overloading)

연산자 오버 로딩은 C++가 가진 다형 특성의 한 예입니다. C++에서는 *연산자로 예시를 들면 주소가 적용되면 해당 주소에 접근하고, 피연산자 2개 사이에 *연산자를 쓴다면 수행하는 것은 곱셈을 연산합니다. 이렇게 C++는 피연산자의 개수와 데이터형을 판단하여 어떤 연산을 수행할지 결정할 수 있습니다. operatorOp(argument) Op에는 연산자가 들어가고 그 앞 'operator'는 키워드입니다. 연산자 오버로딩은 멤버 함수가 아닌 함수에서도 가능합니다. 예시 - 멤버 함수 클래스의 데이터 은닉을 통하여 데이터 멤버에 접근하는 멤버 함수를 정의하지 않고, 연산자 오버 로딩을 통하여 오버 로딩된 연산자를 가지고 해당 데이터 멤버에 값을 더하는 클래스를 정의해봅시다. 이때 왼쪽 피연산자 객체의 ..

프로그래밍/C++ 2019.10.15 Plorence

C++ this 포인터

C++에서는 this라는 특별한 포인터가 제공됩니다. 오로지 클래스에서만 사용됩니다. 빠른 이해를 돕기 위해서 예제를 통하여 설명하겠습니다. 자신을 리턴해야 할때 #include class Person { private: int age; public: Person(int p_age) { //파괴자 age = p_age; } Person Clone(); }; Person Person::Clone() { return ? ? ; //뭐가 들어가야 할까? } int main(void) { Person per1 = Person(1); Person per2 = per1.Clone(); } Person클래스의 멤버 함수 Clone은 자기 자신을 반환하려는 멤버 함수입니다. 근데 여기서 자기 자신을 가리키려면 어떻게 ..

프로그래밍/C++ 2019.10.15 Plorence

C++ const 멤버 함수

const 멤버 함수는 객체가 const일 때 호출 가능하게 만들어주기 위해 있습니다. 에러가 나는 상황 #define _CRT_SECURE_NO_WARNINGS #include #include class Person { char * name; public: Person(const char * strName) { name = new char[strlen(strName) + 1]; strncpy(name, strName, strlen(strName)+1); } ~Person() { delete[] name; } void Print() { std::cout

프로그래밍/C++ 2019.10.15 Plorence