1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
using namespace std;
 
class gee
{
public:
    gee(){
        cout << "기본 생성자" << endl << endl;
    }
    gee(int a, int b = 0){
        cout << "생성자 : " << a << endl << endl;
    }
    ~gee(){
        cout << "기본 소멸자" << endl;
    }
    gee(const gee& g){
        cout << "복사 생성자" << endl << endl;
    }
     void operator=(const gee& g){
        cout << "복사 대입자" << endl << endl;
    }
};
 
int main()
{
    // C 스타일
 
    gee a = 0;    
    a = 30;        //oops! a = gee(30) 대입 발생
    gee b = a;    
cs


C++ 스타일



explict을 통한 암시적 형변환 금지


다음과 같이 생성자에 키워드 explicit을 사용하면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    gee(){
        cout << "기본 생성자" << endl << endl;
    }
    explicit gee(int a, int b = 0){
        cout << "생성자 : " << a << endl << endl;
    }
    ~gee(){
        cout << "기본 소멸자" << endl;
    }
    explicit gee(const gee& g){
        cout << "복사 생성자" << endl << endl;
    }
     void operator=(const gee& g){
        cout << "복사 대입자" << endl << endl;
    }
cs


컴파일 되지 않는다. 형변환도 일어나지 않는다.