C++

C++ 클래스 구현, 상속, 자동차 예제

pepega 2021. 10. 21. 16:38
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <string.h>

using namespace std;

class Car
{
private:
    char *carname; //차 이름 변수
    
protected:
    int speed = 100; //속도는 100으로 설정
    
    
public:
    Car() {}
    
    Car(const char *_carname) //이름 입력받기 위한 생성자
    {
        carname = new char[strlen(_carname) + 1]; //NULL문자 포함한 배열 선언
        strcpy(carname, _carname); //carname안에 _carname 입력
        //cout << "생성자 호출" << endl;
    }
    ~Car() {}
    
    char *getName()
    {
        return carname;
    }
    
    int getSpeed()
    {
        return speed;
    }
    
    virtual void speedUp()
    {
        speed += 10;
    }
    
    virtual void speedDown()
    {
        speed -= 10;
    }
       
};

class Sedan : public Car //부모 클래스 상속받음
{
public:
    Sedan(const char *_carname, int sp) : Car(_carname) //속도 입력, 굳이 안해도 괜찮을 듯
    {
        speed = sp;
    }
    ~Sedan() {}
    
    virtual void speedUp()
    {
        speed += 20;
    }
    
    virtual void speedDown()
    {
        speed -= 20;
    }
};

class Truck : public Car
{
public:
    Truck(const char *_carname, int sp) : Car(_carname)  //속도 입력, 굳이 안해도 괜찮을 듯
    {
        speed = sp;
    }
    ~Truck() {}
    
    virtual void speedUp()
    {
        speed += 5;
    }
    
    virtual void speedDown()
    {
        speed -= 5;
    }
};

int main()
{
    Car *carList[5];
    
    //Car *carList = new Car[5];
    
    carList[0] = new Car("K5");  //부모 클래스 호출
    carList[1] = new Truck("포터", 100); //자식 클래스 호출
    carList[2] = new Sedan("그랜저", 100);
    carList[3] = new Truck("볼보", 100);
    carList[4] = new Sedan("아반떼", 100);
    
    for(int i = 0; i < 5; i++) //모든 배열 출력
    {
        Car *p = carList[i]; //p안에 클래스 함수 입력
        cout << p->getName() << endl; //각 클래스의 이름 호출
        p->speedUp(); //속도 업!
        cout << p->getSpeed() << endl; //각 클래스의 속도 호출
        p->speedDown(); //속도 다운!
        cout << p->getSpeed() << endl;
        p->speedDown();
        cout << p->getSpeed() << endl;
        cout << endl;
    }
    
    //delete[]carList;
    
    return 0;
    //delete[]~Car;
}

g++ -o main main.cpp
./main
K5
110
100
90

포터
105
100
95

그랜저
120
100
80

볼보
105
100
95

아반떼
120
100
80

'C++' 카테고리의 다른 글

C++ 정적바인딩, 동적바인딩  (0) 2021.10.21
C++ 상속 관계 구조 구현 (학생 예제)  (0) 2021.10.21