반응형

C_C++ 359

C++, 클래스 템플릿 class template

C++에서 클래스 템플릿은 여러 타입에 대해 동작할 수 있는 일반화된 클래스를 작성할 수 있도록 도와줍니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다. 클래스 템플릿은 아래와 같은 방식으로 선언하고 사용할 수 있습니다.1. 클래스 템플릿 선언#include using namespace std;template // 또는 `class T`라고 써도 동일class MyClass {private: T data; // T 타입의 멤버 변수public: // 생성자 MyClass(T value) : data(value) {} // 데이터 출력 void printData() { cout   2. 클래스 템플릿 사용int main() { // int 타입으로..

C_C++ 2024.11.18

C++, 복사생성자 Copy Constructor

C++에서 **복사 생성자(Copy Constructor)**는 객체가 같은 클래스의 다른 객체로부터 복사되어 초기화될 때 호출됩니다. 주로 다음 상황에서 호출됩니다:객체가 복사로 초기화될 때.객체가 함수에 값으로 전달될 때.함수에서 객체를 값으로 반환할 때.복사 생성자의 기본 형태ClassName(const ClassName& other);const는 복사 생성자가 원본 객체를 수정하지 않도록 보장합니다. 예제아래는 복사 생성자를 정의하고 사용하는 간단한 예제입니다.#include #include class MyClass {private: char* name; // 동적으로 관리되는 문자열public: // 기본 생성자 MyClass(const char* inputName) { ..

C_C++ 2024.11.17

C++, 클래스 생성자에서 동적메모리 사용하는 예

C++에서 생성자 내부에서 동적 메모리를 생성하는 예제는 클래스 내부에서 멤버 변수를 동적으로 할당해야 할 때 자주 사용됩니다. new 연산자를 이용해서 메모리를 확보하기 때문에 어딘가에서 반드시 delete 연산자로 메모리를 해제해야 합니다. 그렇지 않으면 객체가 생성될 때마다 사용할 수 있는 메모리가 줄어들게 되며, 전체 프로그램에 영향을 미칠 수 있습니다.다음은 간단한 예제입니다.#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;class MyClass {private: char* name; // 동적 메모리로 관리될 문자열public: // 생성자: 문자열 동적 할당 MyClass(const char* inp..

C_C++ 2024.11.16

C++, 단항연산자 오버로딩 (전위 후위 연산자)

C++에서 단항 연산자 오버로딩은 클래스 내에서 연산자를 재정의하여 객체에 대해 특정 단항 연산(예: ++, --, -, ! 등)을 수행할 수 있도록 하는 기능입니다. 이를 통해 객체에 대해 사용자 정의 연산을 적용할 수 있습니다.단항 연산자 오버로딩 예제아래는 ++ 연산자를 오버로딩하는 간단한 예제입니다.#include using namespace std;class Counter {private: int value;public: // 생성자 Counter(int val = 0) : value(val) {} // ++ 연산자 오버로딩 (전위 연산) Counter& operator++() { ++value; // 값 증가 return *this; // 증..

C_C++ 2024.11.15

C++, 프렌드 함수로 연산자 오버로딩 만들기

C++에서 연산자 오버로딩은 클래스의 멤버 함수나 프렌드 함수를 사용하여 구현할 수 있습니다. 특히, 두 객체 간의 연산이 필요할 때 프렌드 함수를 사용하면 유용합니다. 예를 들어 두 객체의 값을 더하거나 비교하는 연산자를 오버로딩하고 싶다면, 프렌드 함수를 사용하여 접근 제한을 뛰어넘어 두 객체의 멤버 변수에 접근할 수 있습니다.다음은 프렌드 함수를 사용하여 + 연산자를 오버로딩하는 예제입니다. Complex라는 클래스가 복소수를 표현한다고 가정하고, 이 클래스에서 + 연산자를 오버로딩하여 두 복소수를 더하는 기능을 구현해보겠습니다.코드 예제#include using namespace std;class Complex {private: double real; // 실수 부분 double i..

C_C++ 2024.11.14

C++, 멤버함수로 연산자 오버로딩

Point 클래스를 C++에서 정의하고, 멤버 함수를 이용해 연산자 오버로딩을 구현하는 예제를 보여드리겠습니다. 이 예제에서는 좌표를 나타내는 Point 클래스를 만들고, 덧셈(+), 뺄셈(-), 그리고 대입(=) 연산자를 오버로딩하여 두 좌표를 더하거나 뺄 수 있도록 합니다.#include using namespace std;class Point {private: int x, y; // x, y 좌표public: // 생성자 Point(int x = 0, int y = 0) : x(x), y(y) {} // 연산자 오버로딩 - 덧셈 Point operator+(const Point& other) const { return Point(x + other.x, y + ..

C_C++ 2024.11.13

C++, typeid() 클래스 이름 알아내기

C++에서는 객체의 실제 클래스 이름을 알아내기 위해 typeid 연산자와 type_info 클래스를 활용할 수 있습니다. 이 기능을 사용하려면 객체가 다형적(polymorphic)이어야 하므로, 즉 클래스에 가상 함수가 정의되어 있어야 합니다.아래는 typeid를 이용해서 객체의 클래스 이름을 알아내는 예제입니다. #include #include class Base {public: virtual ~Base() {} // 다형성을 위해 가상 소멸자를 추가합니다.};class Derived : public Base {};int main() { Base* obj = new Derived(); // 객체의 실제 클래스 이름을 출력 std::cout (Output)Class name: c..

C_C++ 2024.11.12

C++, 순수가상함수 Pure Virtual Function

순수 가상 함수(Pure Virtual Function)는 객체 지향 프로그래밍에서 인터페이스와 유사한 개념을 구현할 때 사용됩니다. 순수 가상 함수는 함수의 선언만 있고, 정의가 없는 함수입니다. **파생 클래스에서 반드시 재정의(override)**해야 하며, 이를 통해 다형성을 구현하는데 도움을 줍니다. 순수 가상 함수를 포함한 클래스를 추상 클래스라고 부르며, 추상 클래스의 인스턴스를 직접 생성할 수 없습니다.순수 가상 함수의 선언순수 가상 함수는 함수 선언 끝에 = 0을 추가하여 정의됩니다.virtual void 함수이름() = 0; 예제 코드아래 예제에서 Shape는 순수 가상 함수를 포함하는 추상 클래스이고, 이를 상속받는 Circle과 Rectangle 클래스에서 순수 가상 함수 draw를..

C_C++ 2024.11.11

C++, 가상 함수의 특징 Features of Virtual Functions

C++에서 가상함수(Virtual Function)는 다형성을 구현하기 위해 사용되는 함수입니다. 주로 상속 관계에서 부모 클래스 포인터가 자식 클래스 객체를 가리킬 때, 자식 클래스의 함수를 호출하기 위해 사용됩니다. 이를 통해 동적 바인딩을 실현할 수 있습니다. 가상 함수의 특징virtual 키워드로 선언된 함수입니다.부모 클래스에서 선언된 가상함수는 자식 클래스에서 재정의(Override)될 수 있습니다.부모 클래스 포인터로 자식 클래스 객체를 가리킬 때, 부모 클래스에 정의된 함수가 아닌 자식 클래스에서 재정의된 함수가 호출됩니다.예제 코드아래 예제에서 부모 클래스 Animal에는 가상 함수 sound가 정의되어 있고, Dog와 Cat 클래스가 이를 상속하여 각자의 방식으로 재정의합니다.  가상 ..

C_C++ 2024.11.10

c++, 정적 멤버 변수와 정적 함수 static member variables and static functions

C++에서 클래스의 정적(static) 멤버는 클래스의 모든 객체가 공유하는 변수나 함수입니다. 정적 멤버는 특정 객체가 아닌 클래스 전체에 속하므로, 클래스의 인스턴스화 여부와 관계없이 접근할 수 있습니다. 정적 멤버는 클래스가 로드될 때 생성되고 프로그램이 종료될 때 소멸됩니다. 정적 멤버 변수클래스의 모든 객체가 같은 메모리 위치를 공유하는 변수입니다.정적 멤버 변수는 클래스 외부에서 초기화가 필요합니다.정적 멤버 함수객체 없이 호출할 수 있는 함수입니다.this 포인터를 사용할 수 없으므로, 객체 고유의 멤버에 접근할 수 없습니다.예제 코드아래는 정적 멤버 변수와 정적 멤버 함수를 사용하는 간단한 예제입니다.#include using namespace std;class MyClass {public..

C_C++ 2024.11.02
반응형