Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 클래스를 다른 클래스 타입으로 변환하는 방법

개요

이 튜토리얼에서는 C/C++에서 한 클래스를 다른 클래스 타입으로 변환하는 방법을 예제 프로그램과 함께 살펴보겠습니다.

클래스 간의 변환은 연산자 오버로딩(operator overloading)을 활용하여 구현할 수 있습니다. 이 기법을 사용하면 한 클래스 타입의 데이터를 다른 클래스 타입의 객체에 자연스럽게 할당할 수 있습니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

// 변환될 대상 클래스
class Class_type_one {
    string a = "TutorialsPoint";
    public:
        string get_string(){
            return (a);
        }
    void display(){
        cout << a << endl;
    }
};

// 변환할 클래스
class Class_type_two {
    string b;
    public:
    void operator=(Class_type_one a){
        b = a.get_string();
    }
    void display(){
        cout << b << endl;
    }
};

int main(){
    // 첫 번째 타입
    Class_type_one a;
    // 두 번째 타입
    Class_type_two b;
    // 타입 변환
    b = a;
    a.display();
    b.display();
    return 0;
}

실행 결과

TutorialsPoint
TutorialsPoint

코드 설명

1. 변환될 대상 클래스(Class_type_one)

이 클래스는 문자열 멤버 변수 a를 가지며, 생성 시점에 "TutorialsPoint"로 초기화됩니다. 내부 데이터를 외부에 전달하기 위한 get_string() 메서드와 값을 출력하는 display() 메서드를 제공합니다.

2. 변환할 클래스(Class_type_two)

이 클래스가 핵심입니다. 대입 연산자(=)를 오버로딩하여 Class_type_one 타입의 객체를 매개변수로 받습니다. 오버로딩된 연산자 내부에서 get_string()을 호출해 상대 클래스의 데이터를 자신의 멤버 변수 b에 복사함으로써 클래스 간 변환이 이루어집니다.

3. main 함수의 동작 흐름

b = a; 문장이 실행되면 일반적인 포인터 복사가 아닌, 오버로딩된 대입 연산자가 호출됩니다. 그 결과 두 객체 모두 동일한 문자열을 가지게 되어 출력 결과가 같음을 확인할 수 있습니다.

참고: 다른 변환 방식

연산자 오버로딩 외에도 C++에서는 클래스 변환을 위해 다음과 같은 방법들을 사용할 수 있습니다.

  • 변환 생성자(converting constructor): 목적지 클래스가 원본 클래스 객체를 매개변수로 받는 생성자를 정의하는 방식
  • 변환 연산자(conversion operator): 원본 클래스에 operator 목적지타입() 형태의 멤버 함수를 정의하여 암시적 변환을 지원하는 방식

상황에 따라 적절한 방식을 선택하면 코드의 가독성과 유연성을 높일 수 있습니다.