OOP HomeWork

This commit is contained in:
e2hang
2025-08-11 00:01:30 +08:00
commit e8a5ca2363
119 changed files with 3187 additions and 0 deletions

131
oop_hw5/hw6/main.cpp Normal file
View 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB