목록전체 글 (283)
Minwoo Dev.
이번에는 입력과 출력을 담당하는 연산자에 대해서 오버로딩을 해 보겠다. class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0):xpos(x),ypos(y){} void ShowPosition() const{ cout 이번에도 Point 클래스를 활용하여 보자. 위의 Point 클래스의 경우에, 출력을 아래와 같이 했을 때 어떻게 출력되는 게 좋겠는가 ?cout 아마 ( 3 , 4 ) 혹은 [ 5, 3 ]과 같이 괄호, 그리고 콤마와 함께 출력되는 것이 Point클래스를 잘 출력하는 방법이 될 것이다. 이렇게 출력되도록 입출력 연산자를 오버로딩할 수 있다. 그러기 위해서는 ostream과 istrea..
수학에서 교환법칙은 아래 식을 의미한다.a + b = b + a 순서가 바뀌어도 연산의 결과는 동일하다는 말이다. 연산자 오버로딩에서는 이러한 교환법칙이 가능하지 않다.예를 들어 멤버함수로의 + 연산자 오버로딩에서,pos1 + pos2; 위 코드는 아래처럼 변환된다. pos1.operator+(pos2); 하지만, 둘의 순서가 바뀐다면,pos2 + pos1; 결과는 달라지게 된다.pos2.operator(pos1); 위와 같이, 연산자 오버로딩에서는 기본적으로 교환법칙이 성립하지 않는다. 하지만 몇 줄의 코드로 교환법칙이 성립하게끔 바꿀 수 있다.그에 대해서 설명하겠다. 연산자 오버로딩에서 교환법칙을 가능하게 만드는 방법전역함수 혹은 멤버함수로 하나 더 구현!#includeusing namespa..
후위 연산자해당 라인의 다른 연산이 모두 끝나고 나서 증감연산자를 계산한다는 특징이 있다.반환은 현재 값, 그리고 원래 값은 1 증가시키는 형태이다. 이러한 후위 연산자는 단순히 1을 증가시키거나 감소시키는 것이 아니라 반환은 증감 전의 값, 반환과 별개로 원래의 값을 증감시켜야 하기 때문에 보다 복잡하다고 생각할 수 있다. operator++ (O)++operator (X) 연산자 오버로딩을 할 때는 operator 뒤에 무조건 오버로딩할 연산자를 작성해야 한다.이러한 이유 때문에 전위 연산자와 후위 연산자를 구분하지 못하는 문제점도 발생한다. 이러한 문제점들을 해결할 방법을 코드를 통해 알아보자. 후위 연산자 오버로딩operator++(매개변수, int)operator--(매개변수, int)i..
사칙연산 연산자를 오버로딩 해보았으니, 이번에는 증감 연산자 오버로딩을 해보겠다. 증감 연산자증감 연산자는 증가 연산자, 감소 연산자로 나뉜다. 증가 연산자 (전위 연산자)++num; num에 1이라는 값을 먼저 증가시킨 뒤 해당 라인의 연산을 수행한다. 감소 연산자 (전위 연산자)--num; num에 1이라는 값을 먼저 감소시킨 뒤 해당 라인의 연산을 수행한다. 즉, 전위 연산자는 해당 라인의 다른 연산자보다 전위 연산자가 우선순위를 갖는 것이다. 증가 연산자 구현(operator++)#includeusing namespace std;class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0):xpos(x),ypos(y..
코드를 작성하다 보면 우리가 가장 많이 사용하는 것 중 하나가 바로 "연산자" 일 것이다. int a = b + c;위처럼 연산자를 사용하여 우리는 다양한 값을 계산할 수 있다. C++ 에서는 우리가 알고있는 사칙연산(+, -, *, /) 외에도 정말 많은 연산자가 존재하는데, 이러한 연산자를 우리의 의도에 맞게 변경하려고 하면 어떤 방법을 사용해야 할까? 간단히 예를 들어, x와 y값을 가지는 Point 클래스끼리 + 연산을 수행한다고 하자.#includeusing namespace std;class Point{ // 두 점을 나타내는 Point 클래스private: int xpos, ypos;public: Point(int x = 0, int y = 0):xpos(x),ypos(y){} ..
문제 에제 PointConsoleOutput.cpp에서 정의한 Point 클래스를 대상으로 아래의 main함수가 보이는 대로 데이터의 입력이 가능하도록, 그리고 실행의 예에서 보이는 대로 출력이 이루어지도록 >> 연산자를 오버로딩하자. PointConsoleOutput.cpp#includeusing namespace std;class Point{private: int xpos, ypos;public: Point(int x=0, int y=0) : xpos(x), ypos(y){} void ShowPosition() const{ cout main함수int main(void){ Point pos1; cout > pos1; cout > pos2; cout ..
문제 1 : 멤버 함수의 형태로 오버로딩부호 연산자로서 -는 단항 연산자이다. 이 연산자는 피연산자의 부호를 반전시킨 결과는 반환한다. 예를 들어서 다음 문장이 실행되면,int num2 = -num1; num2에는 num1과 절대값은 같지만 부호가 다른 값이 저장된다. 물론 num1의 값에는 영향을 미치지 않는다.이와 유사하게 Point 클래스를 대상으로 - 연산자를 오버로딩 해보자. 다음의 문장이 실행되면,Point pos2 = - pos1; pos2의 멤버변수는 pos1의 멤버변수 값과 다른 부호의 값으로 초기화되도록 오버로딩 해보자. 정답// - 연산자 오버로딩#includeusing namespace std;class Point{private: int xpos, ypos;public: ..
문제 1Point 클래스에 대해서 다음 조건을 만족하는 형태로 - 연산자를 오버로딩 해보자.전역함수 기반으로 오버로딩멤버 별 - 연산의 결과를 담은 Point 객체 반환 정답// Point 클래스에 대해 - 연산자 오버로딩#includeusing namespace std;class Point{private: int xpos, ypos;public: Point(int x=0, int y=0):xpos(x),ypos(y){} void ShowPosition() const{ cout 실행 결과 문제 2Point 클래스에 대해서 다음 조건을 만족하는 형태로 += 연산자와 -= 연산자를 오버로딩 해보자.멤버함수 기반으로 오버로딩연산 'pos1 += pos2'의 결과로 pos1 의..
C++에서는 다중 상속이 가능하다.가능하다고 하더라고 발생할 수 있는 문제점이 많아 사용하는 것을 권장하지는 않지만, 다른 언어들과는 다른 C++만의 특징이기 때문에 짚고 넘어가겠다. 다중 상속(Multiple Inheritance)Java와 같은 언어와 다르게, C++은 두 개 이상의 부모에 대한 상속을 지원한다.#includeusing namespace std;class A{public: A(){}};class B{public: B(){}};class C: public A, public B{public: C():A(),B(){}}; 위 코드는 클래스 A, B를 클래스 C가 다중상속을 통해 상속받고 있는 코드이다.상속을 작성할 때는 콤마(,)를 사용하여 여러 개를 작성할 수 있다. ..
C++에서 상속과 다형성의 개념을 사용하다 보면, 오버라이딩 된 함수 중 원하는 것을 호출하기 힘든 상황이 있다. 예를 들어, 아래와 같이 Animal, MomDog, BabyDog라는 클래스가 존재하고 Animal #includeusing namespace std;class Animal{private: int age; int height;public: Animal(int a, int h) : age(a), height(h){} void Introduce(){ cout Introduce();} 실행 결과 main함수에서 다형성 중 업캐스팅을 사용하여 Animal 클래스의 참조로 BabyDog 객체를 가리키고 있다.이 상황에서 우리는 Introduce 함수를 실행하면 ..