OOP HomeWork
This commit is contained in:
131
oop_hw5/hw6/main.cpp
Normal file
131
oop_hw5/hw6/main.cpp
Normal file
@@ -0,0 +1,131 @@
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
using std::string;
|
||||
|
||||
class Wall
|
||||
{
|
||||
public:
|
||||
Wall() :color(0)
|
||||
{
|
||||
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ǽ" << endl;
|
||||
}
|
||||
void Paint(int newColor)
|
||||
{
|
||||
color = newColor;
|
||||
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ˢǽ" << endl;
|
||||
}
|
||||
int GetColor() const
|
||||
{
|
||||
return color;
|
||||
}
|
||||
virtual void display() {
|
||||
cout << "ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ0<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8" << endl;
|
||||
cout << "Wall Color ? : " << this->GetColor() << endl;
|
||||
|
||||
}
|
||||
virtual ~Wall() {
|
||||
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Wall" << endl;
|
||||
}
|
||||
private:
|
||||
int color;
|
||||
};
|
||||
class Door
|
||||
{
|
||||
public:
|
||||
Door() :openOrClose(false)
|
||||
{
|
||||
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << endl;
|
||||
}
|
||||
void Open()
|
||||
{
|
||||
if (!IsOpened())
|
||||
{
|
||||
openOrClose = true;
|
||||
cout << "<EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "<EFBFBD>ſ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>" << endl;
|
||||
}
|
||||
}
|
||||
void Close()
|
||||
{
|
||||
if (IsOpened())
|
||||
{
|
||||
openOrClose = false;
|
||||
cout << "<EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "<EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>" << endl;
|
||||
}
|
||||
}
|
||||
bool IsOpened() const
|
||||
{
|
||||
return openOrClose;
|
||||
}
|
||||
virtual ~Door() {
|
||||
|
||||
}
|
||||
private:
|
||||
bool openOrClose;
|
||||
};
|
||||
//<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ɫ0<C9AB><30>1<EFBFBD><31>2<EFBFBD><32>3<EFBFBD><33>4<EFBFBD><34>5<EFBFBD><35>6<EFBFBD><36>7<EFBFBD><37><EFBFBD><EFBFBD>8
|
||||
class WallWithDoor : public Wall, public Door{
|
||||
public:
|
||||
WallWithDoor() : Door(), Wall(){}
|
||||
WallWithDoor(bool fl,int cl) {
|
||||
this->Paint(cl);
|
||||
fl == true ? this->Open() : this->Close();
|
||||
if (cl == 1) this->Close();
|
||||
if (cl == 4) this->Open();
|
||||
}
|
||||
void display() {
|
||||
cout << "ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ0<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8" << endl;
|
||||
cout << "Door is Open? :" << this->IsOpened() << endl;
|
||||
cout << "Wall Color ? : " << this->GetColor() << endl;
|
||||
}
|
||||
};
|
||||
|
||||
class WallWithDoor_Combined {
|
||||
private:
|
||||
Door x;
|
||||
Wall y;
|
||||
public:
|
||||
WallWithDoor_Combined() : x(), y() {}
|
||||
WallWithDoor_Combined(bool fl, int cl) {
|
||||
y.Paint(cl);
|
||||
fl == true ? x.Open() : x.Close();
|
||||
if (cl == 1) x.Close();
|
||||
if (cl == 4) x.Open();
|
||||
}
|
||||
void display() {
|
||||
cout << "ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ0<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8" << endl;
|
||||
cout << "Door is Open? :" << x.IsOpened() << endl;
|
||||
cout << "Wall Color ? : " << y.GetColor() << endl;
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
WallWithDoor a1(true,1);
|
||||
WallWithDoor a2(true, 2);
|
||||
WallWithDoor a3(true, 4);
|
||||
WallWithDoor_Combined b1(true,1);
|
||||
WallWithDoor_Combined b2(true, 2);
|
||||
WallWithDoor_Combined b3(true, 4);
|
||||
Wall* p = new Wall();
|
||||
Wall* t1 = &a1; //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
WallWithDoor* t2 = dynamic_cast<WallWithDoor*> (p);//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
cout << typeid(t2).name() << endl;
|
||||
p->display();
|
||||
a1.display();
|
||||
a2.display();
|
||||
a3.display();
|
||||
b1.display();
|
||||
b2.display();
|
||||
b3.display();
|
||||
return 0;
|
||||
}
|
BIN
oop_hw5/hw6/测试截图6.png
Normal file
BIN
oop_hw5/hw6/测试截图6.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 437 KiB |
Reference in New Issue
Block a user