C++ 9-1

BakJeonghyun·2022년 10월 24일
0

전공C++

목록 보기
15/20

7-4

두 개의 Power 객체를 더하는 + 연산자를 Power 클래스의 operator+() 멤버 함수로 작성하라.

[실행 결과]
kick=3, punch=5
kick=4, punch=6
kick=7, punch=11

1. Power 클래스 안에 멤버함수로 연산자 함수가 선언되어있다.
2. 객체의 멤버 변수의 값을 각각 더하는 연산이다.
3. 리턴 타입은 Power 클래스인 것 같다.
4. 값을 또 다른 객체에 저장한다.

Power operator+ (Power op2);

Power Power::operator+(Power op2) {
   	Power tmp;
   	tmp.kick = this->kick + op2.kick;
   	tmp.punch = this->punch + op2.punch;
   	return tmp;
}
int main() {
...
	Power c;
    c = a + b;
}
#include <iostream>
using namespace std;

class Power {
	int kick, punch;
public:
	Power(int kick=0, int punch=0) {this->kick=kick; this->punch=punch;}
    void set(int kick, int punch) {this->kick=kick; this->punch=punch;}
	void show();
    Power operator+ (Power op2);
};

Power Power::operator+(Power op2) {
   	Power tmp;
   	tmp.kick = this->kick + op2.kick;
   	tmp.punch = this->punch + op2.punch;
   	return tmp;
}

void Power::show() {
	cout << "kick=" <<kick << ", " << "punch=" << punch << endl;
}

int main() {
	Power a, b, c;
    a.set(3,5);
    b.set(4, 6);
    c = a + b;
    a.show();
    b.show();
    c.show();
    
    return 0;
}


7-5

두 개의 Power 객체를 비교하는 == 연산자를 클래스의 operator==() 멤버 함수로 작성하라.

1. 작성할 연산자 함수는 Power 객체의 멤버함수이다.
2. operator==()의 매개변수는 Power클래스의 객체이다.
3. 객체의 멤버함수를 각각 비교한다.
4. 모두 같으면 true를 리턴한다. 리턴타입은 'bool'이다.

리턴타입 operator 연산자 (매개변수리스트)
bool operator == (Power op2);

class Power {
...
public:
	...
    bool operator == (Power op2);
};
bool Power::operator==(Power op2) {
	if ((kick == op2.kick) && (punch == op2.punch))
    	return true;
    else return false;
}

[실행결과]
kick=3,punch=5
kick=3,punch=5
두 파워가 같다.


#include <iostream>
using namespace std;

class Power {
	int kick, punch;
public:
	Power(int kick=0,int punch=0) {this->kick=kick, thist->punch=punch;}
	void show();
    bool operator == (Power op2);
};

void Power::show() {
	cout << "kick=" << kick << "," << "punch=" << punch << endl;
}

bool Power::operator==(Power op2) {
	if(kick==op2.kick && punch==op2.punch)
    	return true;
    else return false;
}

int main() {
	Power op1(3,5), op2(3,5);
    
    op1.show();
    op2.show();
    
    if (op1==op2) 
    	cout << "두 파워가 같다." << endl;
    else
    	cout << "두 파워가 같지 않다." << endl;

}


7-6

두 개의 Power 객체를 더하는 += 연산자를 Power 클래스의 operator+=() 멤버 함수로 작성하라.

  1. Power 클래스 안에 operator+=()를 정의한다.
  2. operator+=()는 자기 자신에 무언가를 더하는 형태일 것이다.
  3. 자기 자신에게 더하는 행위이기 때문에 참조reference를 한다.
  4. 리턴 타입은 Power 일 것이다. 왜냐면 Power 객체 두 개를 더한다고 했기 때문이다.
#include <iostream>
using namespace std;

class Power {
	int kick;
    int punch;
public:
	Power(int kick=0, int punch=0) {
    	this->kick=kick, this->punch=punch;
    }
    void show();
    Power& operator+= (Power op2);
};

void Power::show() {
	cout << "kick=" << kick << ',' << "punch=" << punch << endl;
}

Power& Power::operator+=(Power op2) {
	kick = kick + op2.kick;
    punch = punch + op2.punch;
    return *this;
}

int main() {
	Power a(3,5), b(4,6), c;
    a.show();
    b.show();
    c = a+= b;
    a.show();
    b.show();
}

실행결과

kick=3,punch=5
kick=4,punch=6
kick=7,punch=11
kick=7,punch=11

  • 연산자 함수 선언
    += 연산자의 리턴 타입을 무엇으로 선언해야 할까? += 연산이 사용되는 사례를 보자.

    (a += b) += b; // a += b를 계산한 결과 a에 다시 += b가 계산됨

이 문장을 (a+=b) 연산이 먼저 실행되어 b가 a에 더해진다. 그리고 더해진 a에 += b 연산이 실행된다. 만일 처음 (a+=b) 연산에서 += 연산자 함수가 객체 a를 리턴한다면 리턴된 객체는 a의 복사본이다. 그러면 그 다음에 실행되는 += b 연산은 원본객체 a가 아닌 복사본에 b를 더하게 되는 문제가 발생한다. 이 문제를 해결하기 위해서는 (a+=b) 연산이 객체 a의 참조를 리턴하면 된다. 그러므로 += 연산자의 리턴 타입은 Power&으로 해야 한다.
이제 연산자 함수를 만들어 보자. 컴파일러는 a+=b;의 식을 다음과 같이 변형하며

a. += (b);

Power 객체 a의 operator+=() 함수를 호출하고 객체 b를 매개 변수로 넘긴다. 이에 적절한 operator+=() 연산자 함수는 [그림 7-4]와 같다.

#include <iostream>
using namespace std;

class Power {
	int kick, punch;
public:
	Power(int kick=0, int punch=0) {this->kick = kick; this->punch = punch;}
    void set(int kick, int punch) {this->kick = kick; this->punch = punch;}
    void show() {cout << "kick=" << kick << "," << "punch=" << punch << endl;}
    Power& operator += (Power op2);
};

Power& Power::operator += (Power op2) {
	this->kick += op2.kick;
    this->punch += op2.punch;
    return *this;
}

int main() {
	Power a(3,5), b(4,6);
    a.show();
    b.show();
    
    Power c;
    c = a += b; //c = a.+=(b)와 같은 느낌.
    a.show();
    c.show();
}

profile
I just got started a blog.

0개의 댓글