25. [C++] 상속의 문법적인 이해

2024. 4. 15. 16:56[C++]/C++ 언어 기초

 


실습 문제

 

문제 1. 다음 클래스에 적절한 생성자를 삽입하고, 확인을 위한 main 함수를 적절히 정의해보자.

#include <iostream>
using namespace std;

class Car 
{ //기본 연료 자동차
private:
    int gasolineGauge;
public: 
    int GetGasGauge()
    {
        return gasolineGauge;
    }
};
 
class HybridCar: public Car
{ //하이브리드 자동차
private:
    int electricGauge;
public:  
    int GetElecGuage()
    {
        return electricGauge;
    }
};

class HybridWaterCar: public HybridCar
{ //하이브리드 수중차
private:
    int waterGuage;
public:  
    void ShowCurrentGuage()
    {
        cout<<"잔여 가솔린: "<<GetGasGauge()<<endl;
        cout<<"잔여 전기량: "<<GetElecGuage()<<endl;
        cout<<"잔여 워터량: "<<waterGuage<<endl;
    }
};

 

풀이

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace std;

class Car 
{ //기본 연료 자동차
private:
	int gasolineGauge;
public:
	Car(int mygasolin) : gasolineGauge(mygasolin) {}
	int GetGasGauge()
	{
		return gasolineGauge;
	}
};

class HybridCar: public Car
{ //하이브리드 자동차
private:
	int electricGauge;
public:  
	HybridCar(int mygasolin, int myelectric) : Car(mygasolin), electricGauge(myelectric){

	}
	int GetElecGuage()
	{
		return electricGauge;
	}
	
};

class HybridWaterCar: public HybridCar
{ //하이브리드 수중차
private:
	int waterGuage;
public:  
	HybridWaterCar(int mygasolin, int myelectric, int mywater):HybridCar(mygasolin, myelectric), waterGuage(mywater){

	}
	void ShowCurrentGuage()
	{
		cout<<"잔여 가솔린: "<<GetGasGauge()<<endl;
		cout<<"잔여 전기량: "<<GetElecGuage()<<endl;
		cout<<"잔여 워터량: "<<waterGuage<<endl;
	}
};

int main(){

	HybridWaterCar hcar(20, 50, 30);
	hcar.ShowCurrentGuage();

	return 0;
}

 

 

문제 2. 다음 두 클래스에 적절한 생성자와 소멸자를 정의해보자. 그리고 확인을 위한 main 함수를 정의해보자.

#include <iostream>
using namespace std; 

class MyFriendInfo
{
private:
    char* name;
    int age;
public:
    void ShowMyFreindInfo()
    {
        cout<<"이름: "<<name<<endl;
        cout<<"나이: "<<age<<endl;
    }
};

class MyFriendDetailInfo: public MyFriendInfo
{
private:
    char* addr;
    char* phone;
public:
    void ShowMyFreindDetailInfo()
    {
        ShowMyFreindInfo();
        cout<<"주소: "<<addr<<endl;
        cout<<"전화: "<<phone<<endl<<endl;
    }
};

 

 

풀이

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace std;

class MyFriendInfo
{
private:
	char* name;
	int age;
public:
	MyFriendInfo(char *myname, int myage):age(myage){
		name=new char[strlen(myname)+1];
		strcpy(name, myname);
	}
	void ShowMyFreindInfo()
	{
		cout<<"이름: "<<name<<endl;
		cout<<"나이: "<<age<<endl;
	}
	~MyFriendInfo(){
		cout<<"MyFriendInfo 소멸자"<<endl;
		delete []name;
	}
};

class MyFriendDetailInfo: public MyFriendInfo
{
private:
	char* addr;
	char* phone;
public:
	MyFriendDetailInfo(char *myname, int myage, char *myaddr, char *myphone) : MyFriendInfo(myname, myage){
		addr=new char[strlen(myaddr)+1];
		phone=new char[strlen(myphone)+1];
		strcpy(addr, myaddr);
		strcpy(phone, myphone);

	}
	void ShowMyFreindDetailInfo()
	{
		ShowMyFreindInfo();
		cout<<"주소: "<<addr<<endl;
		cout<<"전화: "<<phone<<endl<<endl;
	}
	~MyFriendDetailInfo(){
		cout<<"MyFriendDetail 소멸자"<<endl;
		delete []addr;
		delete []phone;
	}
};

int main(){

	MyFriendDetailInfo myinfo("주주", 28, "경기도 파파시", "010-1234-5678");
	myinfo.ShowMyFreindDetailInfo();

	return 0;
}
반응형