[C++] μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)

2022. 6. 11. 14:36Β·πŸ“ Language/✏ C & C++

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)

κΈ°μ‘΄ μ œκ³΅ν•˜κ³  μžˆλŠ” μ—°μ‚°μžλ₯Ό μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ 클래슀둜 μ‚¬μš©ν•˜λŠ” 것을 λ§ν•œλ‹€.

 

  • μƒˆλ‘œμš΄ μ—°μ‚°μžλ₯Ό μ •μ˜ν•  μˆ˜λŠ” μ—†λ‹€.
  • κΈ°λ³Έ 제곡 데이터 ν˜•μ‹μ— μ μš©ν•  λ•Œ μ—°μ‚°μžμ˜ 의미λ₯Ό λ‹€μ‹œ μ •μ˜ν•  수 μ—†λ‹€.
  • 멀버 ν•¨μˆ˜λ‘œ μ˜€λ²„λ‘œλ“œλœ μ—°μ‚°μžμ˜ μ²« 번째 νŒŒλΌλ―Έν„°λŠ” 항상 μ—°μ‚°μžκ°€ ν˜ΈμΆœλ˜λŠ” 객체의 클래슀 ν˜•μ‹μ΄λ‹€.

 

1. κ΅¬ν˜„

κ°€μž₯ λ‹¨μˆœν•œ λ§μ…ˆ μ—°μ‚°μžλ₯Ό 예둜 κ΅¬ν˜„ν•΄λ³΄μž.

 

1) 멀버 ν•¨μˆ˜

  • p1+p2λŠ” p1.operator+(p2)와 κ°™λ‹€.
  • 멀버 ν•¨μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜κ°€ λ‘˜ λ‹€ 같은 λ°©μ‹μœΌλ‘œ μ˜€λ²„λ‘œλ”© λ˜μ–΄μžˆλ‹€λ©΄ 멀버 ν•¨μˆ˜κ°€ μš°μ„ μ‹œλœλ‹€. νŠΉμ • μ˜›λ‚  μ»΄νŒŒμΌλŸ¬μ—μ„  이런 상황에 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ μ›¬λ§Œν•˜λ©΄ 멀버 ν•¨μˆ˜λ‘œ μ˜€λ²„λ‘œλ”©ν•˜λŠ” 것이 μ’‹λ‹€.
#include <iostream>
using namespace std;

class Product {
	int var;

public:
	Product() :var(0) {}
	Product(int x) : var(x) {}
	void print() const { cout << var << "\n"; }
	void set(int x) { var = x; }

	Product operator+(Product& a) const {
		Product b(a.var + var);
		return b;
	}
};

int main() {
	Product a(10);
	Product c = a + a;
	c.print();
}

 

2) μ „μ—­ ν•¨μˆ˜

  • friend ν‚€μ›Œλ“œλ‘œ 멀버 λ³€μˆ˜μ— λŒ€ν•œ 접근이 κ°€λŠ₯ν•˜κ²Œ ν•΄μ•Ό ν•œλ‹€.
  • p1+p2λŠ” operator+(p1, p2)와 κ°™λ‹€.
#include <iostream>
using namespace std;

class Product {
	int var;

public:
	Product() :var(0) {}
	Product(int x) : var(x) {}
	void print() const { cout << var << "\n"; }
	void set(int x) { var = x; }

	friend Product operator+(const Product& a, const Product& b);
};

Product operator+(const Product& a, const Product& b) {
	return Product(a.var + b.var);
}

int main() {
	Product a(10);
	Product c = a + a;
	c.print();
}

 

2. λ‹€μ–‘ν•œ μ‚¬μš©

// == 
bool MyString::operator==(MyString& str)
{
	return !compare(str);
}

// << 
std::ostream& operator<<(std::ostream& os, const Complex& c)
{
	os << "( " << c.real << " , " << c.img << " ) ";
	return os;
}

// +
Complex operator+(const Complex& a, const Complex& b)
{
	Complex temp(a.real + b.real, a.img + b.img);
	return temp;
}

// []
char& MyString::operator[](const int index)
{
	return string_content[index];
}

// ν˜•λ³€ν™˜
operator int() { return 333; }
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C & C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C++] RTTI(Run Time Type Information)
  • [C++] λ¬Έμžμ—΄ 슀트림(stringstream)
  • [C++] l-value와 r-value
  • [C/C++] malloc()κ³Ό new의 차이
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C++] μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”