Minwoo Dev.
[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-1 : 상속과 생성자의 호출 문제풀이 본문
728x90
반응형
SMALL
문제 1
앞서 상속관계에 놓여있는 클래스의 생성자 정의 및 호출 방식에 대해 설명하였다. 이 내용을 바탕으로 다음 클래스에 적절한 생성자를 삽입해보자. 그리고 이의 확인을 위한 main 함수를 적절히 정의해 보자.
class Car
{
private:
int gasolineGauge;
public:
int GetGasGauge()
{
return gasolineGauge;
}
};
class HybridCar : public Car
{
private:
int electricGauge;
public:
int GetElecGauge()
{
return electricGauge;
}
};
class HybridWaterCar : public HybridCar
{
private:
int waterGauge;
public:
void ShowCurrentGauge()
{
cout << "잔여 가솔린 : " << GetGasGauge() << endl;
cout << "잔여 전기량 : " << GetElecGauge() << endl;
cout << "잔여 워터량 : " << waterGauge << endl;
}
};
참고로, Car 클래스는 가솔린으로 동작하는 자동차를 표현한 것이고, HybridCar 클래스는 가솔린과 전기로 동작하는 자동차를 표현한 것이다. 그리고 마지막으로 HybridWaterCar 클래스는 가솔린과 전기뿐만 아니라, 물도 동시에 연료로 사용할 수 있는, 가상의 자동차를 표현한 것이다.
그러나 이 문제는 위의 클래스들이 의미하는 바를 몰라도 해결이 가능하다.
그리고 위의 코드에서는 앞서 보인 예제들과 달리 상속의 깊이(몇 단계에 걸쳐서 상속이 이뤄지고 있는가를 의미함)가 한단계 더해졌지만, 그로 인해서 여러분이 더 알아야 할 문법적 지식이 있거나, 해석하는 방식에 있어서 차이가 있는 것은 아니니, 이 부분에 부담을 느끼지 않았으면 좋겠다.
정답
#include <iostream>
using namespace std;
class Car
{
private:
int gasolineGauge;
public:
Car() : gasolineGauge(0) {}
Car(int n) : gasolineGauge(n) {}
int GetGasGauge()
{
return gasolineGauge;
}
};
class HybridCar : public Car
{
private:
int electricGauge;
public:
HybridCar() : Car(), electricGauge(0) {}
HybridCar(int n) : Car(n), electricGauge(0) {}
HybridCar(int n1, int n2) : Car(n1), electricGauge(n2) {}
int GetElecGauge()
{
return electricGauge;
}
};
class HybridWaterCar : public HybridCar
{
private:
int waterGauge;
public:
HybridWaterCar() : HybridCar(), waterGauge(0) {}
HybridWaterCar(int n) : HybridCar(n), waterGauge(0) {}
HybridWaterCar(int n1, int n2) : HybridCar(n1, n2), waterGauge(0) {}
HybridWaterCar(int n1, int n2, int n3) : HybridCar(n1, n2), waterGauge(n3) {}
void ShowCurrentGauge()
{
cout << "잔여 가솔린 : " << GetGasGauge() << endl;
cout << "잔여 전기량 : " << GetElecGauge() << endl;
cout << "잔여 워터량 : " << waterGauge << endl;
}
};
int main(void)
{
HybridWaterCar hywacar(40, 200, 80);
hywacar.ShowCurrentGauge();
}
실행 결과
문제 2
다음 두 클래스에 적절한 생성자와 소멸자를 정의해보자. 그리고 이의 확인을 위한 main 함수를 정의해보자.
#include <iostream>
#include <cstring>
using namespace std;
class MyFriendInfo
{
private:
char *name;
int age;
public:
void ShowMyFriendInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
};
class MyFriendDetailInfo : public MyFriendInfo
{
private:
char *addr;
char *phone;
public:
void ShowMyFriendDetailInfo()
{
ShowMyFriendInfo();
cout << "주소 : " << addr << endl;
cout << "전화 : " << phone << endl
<< endl;
}
};
int main(void)
{
MyFriendDetailInfo frd("Minwoo", 23, "Korea", "010-1234-5678");
frd.ShowMyFriendDetailInfo();
}
정답
#include <iostream>
#include <cstring>
using namespace std;
class MyFriendInfo
{
private:
char *name;
int age;
public:
MyFriendInfo(char *fname, int fage) : age(fage)
{
name = new char[strlen(fname) + 1];
strcpy(name, fname);
}
void ShowMyFriendInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
~MyFriendInfo()
{
delete[] name;
}
};
class MyFriendDetailInfo : public MyFriendInfo
{
private:
char *addr;
char *phone;
public:
MyFriendDetailInfo(char *fname, int fage, char *faddr, char *fphone) : MyFriendInfo(fname, fage)
{
addr = new char[strlen(faddr) + 1];
phone = new char[strlen(fphone) + 1];
strcpy(addr, faddr);
strcpy(phone, fphone);
}
void ShowMyFriendDetailInfo()
{
ShowMyFriendInfo();
cout << "주소 : " << addr << endl;
cout << "전화 : " << phone << endl
<< endl;
}
~MyFriendDetailInfo()
{
delete[] addr;
delete[] phone;
}
};
int main(void)
{
MyFriendDetailInfo frd("Minwoo", 23, "Korea", "010-1234-5678");
frd.ShowMyFriendDetailInfo();
}
실행 결과
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 윤성우의 열혈 C++ 08-1 상속 관계의 확장과 추상 클래스 문제풀이 (0) | 2024.05.03 |
---|---|
[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-2 : IS-A 관계의 상속 (0) | 2024.04.14 |
[C++] this 포인터 (0) | 2024.03.25 |
[C++] 객체 배열, 객체 포인터 배열 (0) | 2024.03.25 |
[C++] 소멸자(Destructor) (0) | 2024.03.24 |