객체

    [C#] foreach가 가능한 객체 만들기

    [C#] foreach가 가능한 객체 만들기

    foreach문은 컬렉션(배열, 리스트 등)의 요소들을 하나씩 꺼내서 처리하는 반복문입니다. 하지만, foreach 문은 객체를 반복 순회할 수 없습니다. foreach 문이 객체 내의 요소를 순회하기 위해서는 foreach 문과의 약속을 지켜야 합니다. 그 약속이란 IEnumerable과 IEnumerator 인터페이스를 상속하는 형식만 지원하기 때문입니다. 1. IEnumerable 인터페이 IEnumerable은 하나의 메소드만 가지고 있어서 이것만 구현하면 됩니다. 메소드 설명 IEnumerator GetEnumerator() IEnumerator 형식의 객체를 반환 왜 IEnumerator 형식을 반환하냐면 IEnumerable 인터페이스가 다음과 같이 정의되어 있기 때문입니다. public i..

    함수의 설계와 객체의 복사

    함수의 설계와 객체의 복사

    전 책에서 이 부분을 좋아합니다. 왜냐하면 이 책을 읽지 않았더라면 평생 모르고 생각하지도 않고 살았을 테니까요. 같은 기능의 함수라도 매개변수와 반환형을 다르게 할 수 있고 그거에 따른 복사 생성자와 대입 연산자 사용 횟수를 저는 절대 생각하고 깨닫지 못했을 거니까요. φ(◎ロ◎;)φ 여기 Complex 클래스가 정의돼있습니다. class Complex { double real, imag; // 복소수의 실수부와 허수부 public: Complex(double r = 0, double i = 0) : real(r), imag(i) { } //... }; void main() { Complex a(1,2), b(3,4), c; } 복소수 객체 a와 b를 더해 c에 저장하려고 합니다. 물론 계산 후 a와 ..

    객체 생성되는 것과 안 되는 것

    객체 생성되는 것과 안 되는 것

    객체 생성인 것(생성자 소멸자 호출됨) Point point; //객체 생성 Point list[10]; //배열 객체 생성 객체 생성이 아닌 것(생성자 소멸자 호출안됨) Point& q = p; //객체의 참조자는 새로운 객체를 만드는 것이 아님 Circle* pc; //객체의 포인터는 새로운 객체를 만드는 것이 아님 Point* plist[10]; //객체의 포인터 배열은 새로운 객체를 만드는 것이 아님 여기서 포인터 객체는 동적할당에 필요합니다. Circle* pc = new Circle(); new 연산자는 data_type 크기의 메모리 블럭을 할당하여 그 블럭의 시작 주소를 반환합니다. 동적 생성을 하면 그때 생성자를 한번 호출합니다.