Em chào các sư huynh ạ
Em đang tìm hiểu vài bài tập về mẫu thiết kế Composite.
Và có 1 bài tập sau:
cho Folder1 có 2 file abc.txt, def.txt và 1 Folder2
Trong Folder2 có 2 file abc.txt và abc.exe
Sử dụng mẫu Composite để đếm số lượng file có tên “abc.txt”
Code của em ở dưới: Và em đang bí cách giải quyết quá :’(
Sư huynh nào có thể giúp em với ạ :’(
Em xin chân thành cảm ơn.
#include <iostream>
#include <conio.h>
#include <string>
#include <vector>
using namespace std;
class Item
{
public:
string ten;
Item(string ten)
{
this -> ten = ten;
}
virtual string what() { return ""; }
};
class File : public Item
{
public:
File(string ten) : Item(ten) {}
string what()
{
return "File";
}
};
class Folder : public Item
{
protected:
vector <Item*> dsItemCon;
public:
Folder(string ten) : Item(ten) {}
string what()
{
return "Folder";
}
const int DemTep(string s) const
{
int dem = 0;
for(int i = 0; i < dsItemCon.size(); i++)
{
if(dsItemCon[i]-> ten == s && dsItemCon[i] -> what() == "File")
dem++;
}
return dem;
}
void Add(Item *item)
{
dsItemCon.push_back(item);
}
};
int main()
{
File f1("abc.txt"), f2("abc.txt"), f3("haha.exe"), f4("def.txt");
Folder folder1("Folder1"), folder2("Folder2");
folder1.Add(&folder2);
folder1.Add(&f1);
folder1.Add(&f4);
folder2.Add(&f2);
folder2.Add(&f3);
cout << "Folder 1 co " << folder1.DemTep("abc.txt") << " tep abc.txt";
getch();
return 0;
}