본문 바로가기

C++22

C++ OOP다형성 가상 함수(virtual function) C++에서 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미합니다. 이러한 가상 함수는 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정됩니다. C++에서 가상 함수는 virtual 키워드를 사용하여 선언합니다. 문법 virtual 멤버함수의원형; 기초 클래스에서 virtual 키워드를 사용해 가상 함수를 선언하면, 파생 클래스에서 재정의된 멤버 함수도 자동으로 가상 함수가 됩니다. 파생 클래스의 멤버 함수 쪽에도 virtual 키워드를 사용하여 가상 함수라는 것을 명확히 하는 것도 나쁘지 않습니다. 동적 바인딩(dynamic binding) C++ 컴파일러는 함수를 호출할 때, 어느 블록에 .. 2020. 7. 5.
C++ OOP상속성 상속(inheritance) 상속(inheritance)은 추상화, 캡슐화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다. 상속은 사용자에게 높은 수준의 코드 재활용성을 제공하며, 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련합니다. 클래스 상속(class inheritance) C++에서 클래스 상속이란 기존에 정의되어 있는 클래스의 모든 멤버 변수와 멤버 함수를 물려받아, 새로운 클래스를 작성하는 것을 의미합니다. 이때 기존에 정의되어 있던 클래스를 기초 클래스(base class) 또는 부모 클래스(parent class), 상위 클래스(super class)라고도합니다. 그리고 상속을 통해 새롭게 작성되는 클래스를 파생 클래스(derived class) .. 2020. 7. 5.
C++ OOP캡슐화 프렌드(friend) C++에서 객체의 private 멤버에는 해당 객체의 public 멤버 함수를 통해서만 접근할 수 있다고 했습니다. 하지만 경우에 따라서는 해당 객체의 멤버 함수가 아닌 함수도 private 멤버에 접근해야만 할 경우가 발생합니다. 이럴 때마다 매번 private 멤버에 접근하기 위한 새로운 public 멤버 함수를 작성하는 것은 매우 비효율적입니다. 따라서 C++에서는 이러한 경우를 위해 프렌드(friend)라는 새로운 접근 제어 키워드를 제공합니다. 프렌드는 지정한 대상에 한해 해당 객체의 모든 멤버에 접근할 수 있는 권한을 부여해 줍니다. 이러한 friend 키워드는 전역 함수, 클래스, 멤버 함수의 세 가지 형태로 사용할 수 있습니다. 프렌드 함수 선언 C++에서 프렌드 함수.. 2020. 7. 5.
C++ 연산자 오버로딩 연산자 오버로딩(operator overloading) C++에서는 이전에 배운 함수 오버로딩과 마찬가지 개념으로 연산자에 대해서도 오버로딩을 제공합니다. 함수 오버로딩이란 같은 일을 처리하는 함수를 매개변수의 형식을 조금씩 달리하여, 하나의 이름으로 작성할 수 있게 해주는 것입니다. C++은 이러한 오버로딩의 개념을 연산자까지 확대하여, 하나의 연산자를 여러 의미로 사용할 수 있게 해줍니다. C++에서는 연산자 오버로딩을 사용자 정의 타입까지 확장할 수 있으며, 클래스도 하나의 타입임을 확실히 보여줍니다. 연산자 함수(operator function) C++에서는 연산자를 오버로딩하기 위해서 연산자 함수(operator function)라는 것을 사용합니다. 연산자 함수의 문법은 다음과 같습니다. 문법.. 2020. 7. 5.
C++ 생성자 & 소멸자 멤버 변수의 초기화 클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성됩니다. 하지만 이 객체는 모든 멤버 변수를 초기화하기 전에는 사용할 수 없습니다. 객체의 멤버 변수는 사용자나 프로그램이 일반적인 초기화 방식으로 초기화할 수 없습니다. 그 이유는 객체의 멤버 중에는 private 멤버도 있으므로, 이러한 private 멤버에 직접 접근할 수 없기 때문입니다. 따라서 private 멤버에 접근할 수 있는 초기화만을 위한 public 함수가 필요합니다. 이러한 초기화 함수는 객체가 생성된 후부터 사용되기 전까지 반드시 멤버의 초기화를 위해 호출되어야 합니다. 생성자(constructor) C++에서는 객체의 생성과 동시에 멤버 변수를 초기화해주는 생성자(constructor)라는 멤버 함.. 2020. 7. 5.
C++ 클래스 클래스(class)란? C++에서 클래스(class)란 구조체의 상위 호환으로 이해할 수 있습니다. C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 좀 더 확장된 의미를 가집니다. C++에서 이러한 구조체와 클래스의 차이는 기본 접근 제어의 차이일 뿐, 나머지는 거의 같습니다. C++에서는 이러한 클래스를 가지고 객체 지향 프로그램을 작성할 수 있습니다. 클래스의 멤버 변수를 프로퍼티(property), 멤버 함수를 메소드(method)라고도 합니다. 객체 지향 프로그래밍(OOP, Object-Oriented Programming) 객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 객체가 바로 프로그래밍의 중심이 됩니다. 객체(object)란 간단히 이야기하.. 2020. 7. 5.