
1인수 생성자
개요
하나의 인수를 갖는 생성자의 역할과 이를 이용한 암시적 형 변환에 대해 알아봅니다.
C++ 버전별 주요 키워드 도입 시기
- C++98 이전: 1인수 생성자를 통한 암시적 형 변환은 초기 C++부터 지원되었습니다.
- C++11:
explicit키워드의 기능이 확장되어 명시적 형 변환을 더 유연하게 제어할 수 있게 되었습니다.
내용 설명
- 1인수 생성자는 한 클래스의 객체를 다른 클래스(또는 다른 데이터 타입)의 것으로 변환할 때 많이 사용합니다. 즉, 변환 가능한 클래스를 만들고자 할 경우 1인수 생성자를 주로 사용합니다.
ClassA CA = IntNum;과 같은 형태의 초기화는ClassA CA(IntNum);와 동일하게 1인수 생성자를 호출합니다. 이때=는 대입 연산자가 아닙니다.- 주의사항: 생성자 초기화 목록에서 배열을 직접 초기화할 수는 없습니다.
strcpy()와 같은 함수를 사용하여 배열의 원소를 하나씩 복사해야 합니다.
예제 코드
#include <iostream.h>
#include <string.h>
#include <conio.h>
#pragma hdrstop
const int MAX = 80;
class xString
{
private:
char str[MAX];
public: // 생성자
xString(){
strcpy( str, "" ); // NULL 문자열로 초기화( 모든 값에 NULL 대입 )
}
xString( char s[] ){
strcpy( str, s ); // 인수 문자열로 초기화
}
public: // 멤버 함수
void input(){
cin.get( str, MAX );
}
void display(){
cout << str;
}
void append( xString xs ){ // 인수 문자열을 덧붙임
if( strlen( str ) + strlen( xs.str ) < MAX - 1 )
strcat( str, xs.str );
else
cout << "\nError : xString too long" << endl;
}
};
#pragma argsused
void main()
{
xString s2, s3;
xString s1( "Greetings, " );
cout << "Enter your name : ";
s2.input();
s1.append( s2 );
s3 = s1; // 객체 간 대입
s3.display();
getch();
}
실행 결과
Enter your name : Lezo
Greetings, Lezo
활용팁
- 1인수 생성자로 인한 원치 않는 암시적 형 변환을 막고 싶다면 생성자 앞에
explicit키워드를 붙여주세요.explicit생성자는ClassA CA(IntNum);와 같은 직접 초기화 구문으로만 호출할 수 있습니다.
'개발 > C++ (98,03,11,14,17,20,23)' 카테고리의 다른 글
| Classic C++ : 기본 생성자와 2인수 생성자 (0) | 2025.11.14 |
|---|---|
| Classic C++ : 생성자(constructor)와 소멸자(destructor) (0) | 2025.11.02 |
| Before Classic C++ : 레퍼런스(&)와 포인터(*) (0) | 2025.11.01 |
| Before Classic C++ : struct (1) | 2025.10.31 |
| Before Classic C++ : Preprocessor (0) | 2025.10.30 |
| Before Classic C++ : Bitwise Operators (0) | 2025.10.29 |
| Before Classic C++ : Conditional Operator (1) | 2025.10.28 |
| Before Classic C++ : enum (0) | 2025.10.27 |