#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번뜨네 ㅠㅠ
좀돠주라 부탁이야
아 사진 잘못올렸다 ㅠㅠ 비밀번호도 막쳐서 수정, 삭제도 못하넹..; 새 글에 실행 사진올려놀게
뭘하고싶은거야 도대체 ㅡㅡ)