개요
이 튜토리얼에서는 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 목적지타입()형태의 멤버 함수를 정의하여 암시적 변환을 지원하는 방식
상황에 따라 적절한 방식을 선택하면 코드의 가독성과 유연성을 높일 수 있습니다.