#include<iostream>
#include<cstring>
using namespace std;

class OS{
private:
char *ver;        
public:
OS(); 
virtual ~OS();        // 가상함수
void Booting() {cout << " 부팅을 시작합니다 " << endl;}
virtual void Explain()=0;
void setVersion(const char* new_version);        
char* getVersion() { return ver; }

};


OS::OS()
{
cout << "OS() 생성자 호출" << endl;

this->ver = new char[1];
this->ver[0] = 0;

Booting();
}

OS::~OS()
{
cout << "~OS() 소멸자 호출" << endl;

delete [] ver;        
}

void OS::setVersion(const char* new_version)
{
        ver = new char[strlen(new_version)+1];
        strcpy(ver, new_version); // 넘겨주는 인수에 주의
}


class MobilePhone : public OS{ // virtual 상속은 지금 필요치 않습니다.
private:
        char vendor;
        char *MP;
public:
        void Explain() {cout << " (MobilePhone의 생성자와 소멸자를 호출하고 멤버함수를 호출하는 과정입니다)" <<endl;}
        MobilePhone();
        virtual ~MobilePhone();        // 가상함수
        void Booting() {cout << " 휴대폰 OS를 부팅합니다. " << endl;} // 함수 오버라이딩
};

MobilePhone::MobilePhone()
{
        cout << "MobilePhone() 생성자 호출" << endl;
        Booting();
        this->MP = new char[1];
        this->MP[0] = 0;
        
        //Booting();
}

MobilePhone::~MobilePhone()
{
        cout << "~MobilePhone() 소멸자 호출" << endl;
        
        delete [] MP;
}



class Notebook : public OS{ // 역시, 현재 구조에선 virtual 상속은 필요치 않음
private:
        char vendor;
        char *NB;

public:
        void Explain() { cout<< "(Notebook의 생성자와 소멸자를 호출하고 멤버함수를 호출하는 과정입니다)" << endl;}
        Notebook();
        virtual ~Notebook();        // 가상함수
        void Booting() {cout << " 노트북 OS를 부팅합니다. " << endl;} // 함수 오버라이딩
};

Notebook::Notebook()
{
        cout << "Notebook() 생성자 호출" << endl; Booting();
        this->NB = new char[1];
        this->NB[0] = 0;
        
        //Booting();
}

Notebook::~Notebook()
{
        cout << "~Notebook() 소멸자 호출" << endl;
        
        delete [] NB;
}


int main()
{
        cout<< "=============이 프로그램은 객체지향 프로그래밍 과제입니다.================"<< endl;
        cout<< "                                                                                                                                                  "<< endl;
        cout<< "=========================================================================="<< endl;



OS* p = new MobilePhone;
p->Explain();

//p = new MobilePhone;
//p->Explain();
MobilePhone c;
c.setVersion("사용자 모바일 폰의 O/S는 Gallxy S\n");        // set, get 접근자를 이용한 간접입력
cout<<c.getVersion()<<endl;

p = new Notebook;
p->Explain();
Notebook d;
d.setVersion("사용자 노트북의 O/S는 Ubuntu\n");                // set, get 접근자를 이용한 간접입력
cout<<d.getVersion()<<endl;

return 0;
}

---- 이게 코딩내용이고 사진이 실행내용인데 미친 OS() 생성자 호출이 2번뜨고, 부팅을 시작합니다 가 2번뜨네 ㅠㅠ

좀돠주라 부탁이야