#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