티스토리 뷰

#include <iostream>

using namespace std;

class IntList 
{
	private:
	int m_list[10];
	
	public:
	void setItem(int index, int value)
	{
		m_list[index] = value;
	}
	
	int getItem(int index)
	{
		return m_list[index];
	}
	
	int *getList()
	{
		return m_list;
	}
};


int main()
{
	IntList my_list;
	my_list.setItem(3, 1);
	cout << my_list.getItem(3) << endl;
	my_list.getList()[3] = 10;
	cout << my_list.getList()[3] << endl;
	
	return 0;
}

// 1
// 10

 

이렇게 할시 ()가 매우 거슬림

 

#include <iostream>

using namespace std;

class IntList 
{
	private:
	int m_list[10];
	
	public:
	// 반환값이 레퍼런스인 이유는 항상 l-value가 되어야하기 때문도 있고 값을 변경할시 변경가능할 수도 있어야 하기 때문이다.
	int & operator [] (const int index)
	{
		return m_list[index];
	}
};


int main()
{
	IntList my_list;
	my_list[3] = 10;
	cout << my_list[3] << endl;
	// IntList my_list;
	// my_list.setItem(3, 1);
	// cout << my_list.getItem(3) << endl;
	// my_list.getList()[3] = 10;
	// cout << my_list.getList()[3] << endl;
	
	return 0;
}

// 10

 

operator 오버로딩에 대해 매우 잘 정리되어있음

https://edykim.com/ko/post/c-operator-overloading-guidelines/

 

C++ 연산자 오버로딩 가이드라인

이 가이드라인은 California Institute of Technology의 강의 자료인 C++ Operator Overloading Guidelines를 번역한 글로 C++에서 연산자를 오버로딩 할 때 유의해야 하는 부분을 잘 설명하고 있다. …

edykim.com

 

int main()
{
	IntList *list = new IntList;
	
	list[3] = 10; // Not OK
	(*list)[3] = 10; // OK
	// IntList my_list;
	// my_list.setItem(3, 1);
	// cout << my_list.getItem(3) << endl;
	// my_list.getList()[3] = 10;
	// cout << my_list.getList()[3] << endl;
	
	return 0;
}

 

 

#include <iostream>

using namespace std;

class Accumlator
{
	private:
	int m_counter = 0;
	
	public:
	int operator()(int i)
	{
		return (m_counter += i);
	}
};


int main()
{
	Accumlator acc;
	cout << acc(10) << endl;
	cout << acc(20) << endl;
	
	return 0;
}

// 10
// 30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함