MewwSikk
article thumbnail
Published 2023. 10. 7. 18:20
[C++] explicit Keyword πŸ‘Ύ CS

friend ν‚€μ›Œλ“œμ— μ΄μ–΄μ„œ explicit ν‚€μ›Œλ“œμ— λŒ€ν•΄μ„œλ„ κ°„λž΅ν•˜κ²Œ μ •λ¦¬ν•˜κ³  λ„˜μ–΄κ°€λ³΄λ € ν•œλ‹€.

(ν‹€λ¦° 뢀뢄이 μžˆλ‹€λ©΄ λ§μ”€ν•΄μ£Όμ„Έμš”.)

 

ν•΄λ‹Ή ν‚€μ›Œλ“œλŠ” μ–΄λ–€ λͺ¨ν˜Έν•œ νƒ€μž…μ΄ 듀어왔을 λ•Œ μžλ™μœΌλ‘œ ν˜•λ³€ν™˜μ΄ λœλ‹€λ©΄, ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ λ³€ν™˜μ„ ν•΄μ£ΌλŠ” 것이닀.

 

κ°„λž΅ν•œ μ˜ˆμ‹œλ₯Ό λ°”νƒ•μœΌλ‘œ μ„€λͺ…해보겠닀.

#include <iostream>

class MyData {
public:
    int my_int_data;
    MyData(int md): my_int_data(md) {}

    ~MyData(){};

    int get_data() const {return my_int_data;}
};

void increament_and_show(MyData md) {
    int tmp=md.get_data();
    std::cout << "my data + 1: " << ++tmp << std::endl;
}

int main() {
    increament_and_show(3);
    return 0;
}

ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ 4κ°€ λ‚˜μ˜€λŠ” 것이 정상인데, ν•œ κ°€μ§€ μ΄μƒν•œ 점을 λ°œκ²¬ν•  수 μžˆλ‹€.

 

increament_and_show() ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄κ°€λŠ” 값은 μƒμˆ˜λ‘œ 3μ΄λΌλŠ” 값이 ν• λ‹Ήλœλ‹€.

 

ν•˜μ§€λ§Œ, λ°›μ•„μ§€λŠ” 값은 MyData νƒ€μž…μœΌλ‘œ λ°›λŠ”λ‹€. 

 

이 λΆ€λΆ„μ—μ„œ 의문점이 μƒκΈ°λŠ”λ°, μ–΄λ–»κ²Œ 이런 것이 κ°€λŠ₯ν• κΉŒ? 

 

이런 ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•œ μ΄μœ λŠ” C++μ—μ„œ Automatic Conversion이 λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

μ΄λŠ” μžλ™μœΌλ‘œ λ³€ν™˜μ„ μ‹œμΌœμ£ΌλŠ” 것인데, 3μ΄λΌλŠ” 값이 λ“€μ–΄μ˜¨λ‹€λ©΄ λ§€κ°œλ³€μˆ˜μ— 할당될 λ•Œ MyData Class의 μƒμ„±μžμ—μ„œ int type을 λ°›λŠ” μƒμ„±μžκ°€ μžˆλŠ”μ§€ ν™•μΈν•˜κ³  ν•΄λ‹Ή μƒμ„±μžκ°€ μ‘΄μž¬ν•œλ‹€λ©΄ μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€μ–΄ md에 ν• λ‹Ήν•˜λŠ” 것이닀..

 

ν•˜μ§€λ§Œ 이런 λͺ¨ν˜Έν•œ ν”„λ‘œκ·Έλž˜λ°μ΄ μ’‹μ§€ μ•Šμ€ κ²½μš°κ°€ 많기 λ•Œλ¬Έμ—, μš°λ¦¬λŠ” explicitμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ Automatic Conversion을 λ°©μ§€ν•  수 μžˆλ‹€.

 

μ‚¬μš©ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™λ‹€.

 

#include <iostream>

class MyData {
public:
    int my_int_data;
    explicit MyData(int md): my_int_data(md) {}

    ~MyData(){};

    int get_data() const {return my_int_data;}
};

void increament_and_show(MyData md) {
    int tmp=md.get_data();
    std::cout << "my data + 1: " << ++tmp << std::endl;
}

int main() {
    increament_and_show(3);
    return 0;
}

μƒμ„±μž μ•žμ— explicit을 λΆ™μ—¬μ£Όμ–΄ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

 

μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό 짜게 λœλ‹€λ©΄ increament_and_show(3); λΌμΈμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜κ²Œ λœλ‹€.

λ°œμƒ 였λ₯˜

profile

MewwSikk

@Mu Gyum

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!