Hamutaro - Hamtaro 4

Backend/C++

[C++] μ—°μ‚°μž λ‹€μ€‘μ •μ˜

carsumin 2024. 12. 3. 15:58
μ—°μ‚°μž λ‹€μ€‘μ •μ˜
  • C++에 μ •μ˜λœ μ—°μ‚°μžλ₯Ό μ‚¬μš©μžκ°€ μ„ μ–Έν•œ 클래슀의 객체에 λŒ€ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ •μ˜ν•˜λŠ” 것
μ£Όμ˜μ‚¬ν•­
- μ—°μ‚°μž 의미λ₯Ό μž„μ˜λ‘œ λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€
- μ—°μ‚°μž κ³ μœ ν•œ νŠΉμ„±μ΄ μœ μ§€λ˜λ„λ‘ ν•œλ‹€
  • λ‹€μ€‘μ •μ˜λ₯Ό ν•  수 μ—†λŠ” μ—°μ‚°μž
    • 멀버 선택 μ—°μ‚°μž (.)
    • 멀버에 λŒ€ν•œ 포인터 μ—°μ‚°μž (.*)
    • μœ νš¨λ²”μœ„ κ²°μ • μ—°μ‚°μž (::)
    • 쑰건 μ—°μ‚°μž (? :)

 

단항 μ—°μ‚°μžμ˜ λ‹€μ€‘μ •μ˜
  • ν”Όμ—°μ‚°μžκ°€ 1개인 μ—°μ‚°μž

 

μ „μœ„ ν‘œκΈ°λ²• 단항 μ—°μ‚°μžμ˜ λ‹€μ€‘μ •μ˜
  • 예제
class IntClass1 {
    int a;
public:
    IntClass1(int n=0) : a(n) {} //μƒμ„±μž
    IntClass1& operator ++ () { //μ „μœ„ ν‘œκΈ° ++ μ—°μ‚°μž λ‹€μ€‘μ •μ˜
    	++a;
        return *this;
    }
	int getValue() const { return a; }
};

 

  • 좜λ ₯
IntClass1 i;
cout << (++i).getValue() << endl; // 좜λ ₯ : 1

 

 

ν›„μœ„ ν‘œκΈ°λ²• 단항 μ—°μ‚°μžμ˜ λ‹€μ€‘μ •μ˜
  • 예제
    • μ•„λž˜μ˜ μ˜ˆμ œμ—μ„œ λ§€κ°œλ³€μˆ˜ intλŠ” 인수 μ „λ‹¬μ˜ μ˜λ―Έκ°€ μ•„λ‹ˆλΌ ν›„μœ„ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λŠ” 단항 μ—°μ‚°μžμž„μ„ λ‚˜νƒ€λƒ„
class IntClass2 {
    int a;
public:
    IntClass2(int n=0) : a(n) {} //μƒμ„±μž
    IntClass2 operator ++ (int) { //ν›„μœ„ ν‘œκΈ° ++ μ—°μ‚°μž λ‹€μ€‘μ •μ˜
    	IntClass2 tmp(*this);
        ++a;
        return tmp;
    }
    int getValue() const { return a; }
};

 

  • 좜λ ₯
IntClass2 i;
cout << (i++).getValue() << endl; // 좜λ ₯ : 0

 

 

이항 μ—°μ‚°μžμ˜ λ‹€μ€‘μ •μ˜
  • μˆ˜μ‹ : complex2Obj1 + complex2Obj2
Complex2 Complex2::operator + (const Complex2 &c) const
{
    Complex2 tmp(*this);
    tmp.rPart += c.rPart;
    tmp.iPart += c.iPart;
    return tmp;
}
  • return Complex2(rPart + c.rPart, iPart + c.iPart);

 

슀트림 좜λ ₯ μ—°μ‚°μž (<<) λ‹€μ€‘μ •μ˜
  • 예제
    • ν”Όμ—°μ‚°μžμ˜ private 멀버λ₯Ό 자유둭게 μ‚¬μš©ν•  수 μžˆλ„λ‘ friend μ§€μ •
class Complex2 {
	...
    friend ostream& operator << (ostream &os, const Complex2 &c);
};
ostream& operator << (ostream& os, const Complex2& c)
{
    os << "(" << c.rPart; //μ‹€μˆ˜λΆ€ 좜λ ₯
    if (c.iPart > 0) //ν—ˆμˆ˜λΆ€ 좜λ ₯
    	os << "+j" << c.iPart;
    else if (c.iPart < 0) 
    	os << "-j" << -c.iPart;
    os << ")";
    return os;
}
#include <iostream>
#include "Complex2.h";
using namespace std;

int main()
{
    Complex2 a(10, 20);
    Complex2 b(5, -3);
    cout << a << "+" << b << "=" << a+b << endl;
    return 0;
}
  • 좜λ ₯
(10+j20) + (5-j3) = (15+j17)