- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang cố gắng tạo một hệ thống thư mục/tệp tương tự như hệ thống được sử dụng trong hầu hết các hệ điều hành.
Về cơ bản, tôi đã xác định được ba lớp nên được sử dụng. Tài liệu
,Thư mục
và một lớp cơ sở công cộng. Vì mục đích sáng tạo, chúng tôi gọi nó làChung
.
Tôi nghĩ ba tựa game này sẽ trông như thế này:
bình thường
lớp chung {
string m_name; // tất cả file và thư mục đều có tên
Thư mục* m_parent; // tất cả các tập tin và thư mục đều có thể có cha
public:
virtual void open() = 0; // được thực thi khi người dùng mở thư mục hoặc tập tin
virtual void draw() const; // tất cả các tập tin và thư mục có thể được in
virtual void setParent(Thư mục* cha mẹ);
Thư mục ảo* getParent() const;
};
thư mục lớp : public Common {
vector m_children; // thư mục có thể chứa các tập tin và thư mục khác
// trong khi các tập tin không thể
public:
virtual void open(); // thư mục mở ra; về cơ bản hiển thị nội dung
virtual void draw() const; // thư mục vẽ khác
};
Tệp lớp : public Common {
// không hẳn là "file", chúng chỉ gọi một hàm khi mở
funcptr m_openAction;
public:
virtual void open(); // gọi m_openAction() khi được mở
};
Chung
có thể biết các lớp con của nó
Thư mục
, đây là hành vi xấu và không nên làm (ít nhất là theo giáo viên của tôi).
câu trả lời hay nhất
Thiết kế hiện tại của bạn không yêu cầuChung
để "biết các lớp con của nó"Thư mục
”。
nó chỉ yêu cầuChung
tiêu đề để khai báo sự tồn tại của một lớp như vậy
作为Thư mục
:
thư mục lớp; // Chuyển tiếp khai báo
lớp chung {
string m_name; // tất cả file và thư mục đều có tên
Thư mục* m_parent; // tất cả các tập tin và thư mục đều có thể có cha
public:
virtual ~Common(); // Đừng quên hàm hủy ảo!
virtual void open() = 0; // được thực thi khi người dùng mở thư mục hoặc tập tin
virtual void draw() const; // tất cả các tập tin và thư mục có thể được in
virtual void setParent(Thư mục* cha mẹ);
Thư mục ảo* getParent() const;
};
nút lớp {
string m_name; // tất cả file và thư mục đều có tên
Node* m_parent; // tất cả các file và thư mục đều có thể có cha
public:
virtual ~Node(); // Đừng quên hàm hủy ảo!
virtual void open() = 0; // được thực thi khi người dùng mở thư mục hoặc tập tin
virtual void draw() const; // tất cả các tập tin và thư mục có thể được in
virtual void setParent(Node* parent);
Nút ảo* getParent() const;
};
setParent(Nút* cha)
phương pháp sẽ có
Nút*
tham số
cha mẹ
实际上是一个
Thư mục*
,例如
Thư mục *pf = Dynamic_cast(cha mẹ);
lớpThư mục
tuyên bố.
Bên trong Common's
setParent()
Tôi phải gọi tới m_children; điều này dẫn đến lỗi. Ngay cả khi tôi đưa folder.h vào common.cpp, tôi không thể truy cập các thành viên riêng của thư mục.
f
Đặt làm thư mục mẹ của một số thư mục
n
Không phải là một hoạt động độc lập trên nút (tệp hoặc thư mục).
f
chỉ có thể
n
Trở thành một trong số họ đồng thời có nghĩa là trở thành một cách hiệu quả
n
cha mẹ của
f
của trẻ em. Vì thế ở
n.setParent(cha mẹ)
, được thực hiện cùng lúc với việc cài đặt
n.mParent == cha mẹ
添加到
n
của
cha mẹ->m_con cái
;
m_con
Không thể truy cập
n
.
Chung
cung cấp
setParent(Thư mục *)
lý do thì cũng tốt như nhau
Thư mục
cung cấp
addChild(Chung *)
lý do, và tất cả họ đều phải làm điều tương tự.
static void Common::link(Thư mục * cha, Chung * con)
Liệu chúng có thể được thay thế công khai tốt hơn không? Có thể vậy; nhưng bạn bắt đầu
Common::setParent(Thư mục *)
,
Thư mục::addChild(Chung *)
Sự kết hợp cũng hợp lý,
pCommon->setParent(pFolder)
Đúng
pFolder->addChild(pCommon)
, bạn cũng cần
Thư mục::removeChild(Chung *)
Điều đó cũng đúng
Thư mục
giao diện.
Thư mục::addChild(Chung * pnode)
Và
Thư mục::removeChild(Common * pnode)
Đúng
Thư mục::m_children
giao diện.
nút
Liệu nó có thực sự là con của thư mục này hay không: không được thêm vào
Thư mục::find(Chung * pnode)
Nó cũng sẽ hữu ích - ít nhất là cho việc thực hiện
Thư mục::find(Chung * pnode)
Yêu cầu
bool Common::operator==(Const chung & khác)
. Hãy nói theo cách này
Chung::clearParent()
Tôi cũng nghĩ đến điều đó nhưng tôi đã gạt nó sang một bên.
Thư mục*
Và
Chung*
Các thông số đã được giải quyết.
#ifndef COMMON_H
#defineCOMMON_H
#include
#include
Thư mục lớp;
lớp chung {
std::string m_name;
Thư mục* m_parent;
public:
rõ ràng Common(std::string const & name)
: m_name(name),m_parent(nullptr){}
ảo ~Common(){};
virtual void open() { /*Sao cũng được*/}
virtual void draw() const {/*Sao cũng được*/}
Thư mục ảo* getParent() const { return m_parent };
virtual void setParent(Thư mục* cha mẹ);
toán tử bool==(Const chung & khác) const {
trả lại m_name == other.m_name;
}
toán tử bool!=(Const chung & khác) const {
return !(*this == other);
}
#if 1 //Kiểm tra
std::string const & name() const {
trả lại m_name;
}
std::string parent() const;
danh sách trống ảo() const {
std::cout << name() << " (trong " << parent() << ')' << std::endl ;
}
#endif
};
#endif // EOF
#ifndef FOLDER_H
#xác định FOLDER_H
#include "common.h"
#include
thư mục lớp : public Common {
std::vector m_children;
std::vector::iterator find(Common const * child) {
auto i = m_children.begin();
for ( ;i != m_children.end() && **i != *child; ++i) {}
trả lại tôi;
}
public:
Thư mục rõ ràng(std::string const & name)
: Chung(tên){}
virtual void open(){/*Sao cũng được*/}
virtual void draw() const {/*Sao cũng được*/}
void addChild(Common * child) {
auto par = child->getParent();
if (par && par != this) {
par->removeChild(con);
}
if (find(child) == m_children.end()) {
m_children.push_back(con);
m_children.back()->setParent(this);
}
}
void RemoveChild(Const chung * con) {
tự động ở đâu = tìm (con);
if (where != m_children.end()) {
m_children.erase(ở đâu);
}
}
#if 1 //Kiểm tra
danh sách trống() const {
std::cout << name() << " {" << std::endl;
for (Const chung * con : m_children) {
con->danh sách();
}
std::cout << '}' << std::endl;
}
#endif
};
#endif //EOF
#ifndef FILE_H
#defineFILE_H
#include "common.h"
Tệp lớp : public Common {
// Bất cứ điều gì
public:
Tệp rõ ràng(std::string const & name)
: Chung(tên){}
virtual void open(){/*Sao cũng được*/};
};
#endif // EOF
#include "common.h"
#include "thư mục.h"
void Common::setParent(Folder* parent) {
auto par = getParent();
if (par && par != parent) {
par->removeChild(this);
}
m_parent = cha mẹ;
m_parent->addChild(cái này);
}
#if 1 //Kiểm tra
std::string Common::parent() const {
trả về m_parent ? m_parent->name() : "";
}
#endif
#include "common.h"
#include "thư mục.h"
#include "file.h"
int main()
{
Thư mục *fo0 = Thư mục mới("folder0");
Tệp * fi0 = Tệp mới("file0");
Tệp * fi1 = Tệp mới("file1");
fo0->addChild(fi0);
fi1->setParent(fo0);
fo0->addChild(fi0); // Nhân đôi
fi1->setParent(fo0); // Trùng lặp
// Hiện tại có 2 file trong thư mục fo0
fo0->list();
Thư mục *fo1 = Thư mục mới("folder1");
fo1->addChild(fi1);
fi0->setParent(fo1);
fo1->addChild(fi1); // Nhân đôi
fi0->setParent(fo1); // Trùng lặp
// Hiện tại có 0 file trong thư mục fo0
// Hiện tại có 2 file trong thư mục fo1
fo0->list();
fo1->danh sách();
xóa fo0;
xóa fo1;
xóa fi0;
xóa fi1;
return 0;
}
Giới thiệu về c++ - Thiết kế hệ thống thư mục/file? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17013321/
Tôi gặp vấn đề sau khi sử dụng NetBeans 6.8. Tôi đã thêm thư mục chứa jar thông qua thuộc tính dự án->Thư viện->tab Biên dịch->Thêm JAR/thư mục. Trong cửa sổ tiếp theo, tôi chọn thư mục và chọn "Sao chép vào thư mục thư viện". Tuy nhiên, tôi vẫn
Trang web của tôi có bí danh tên miền. Tôi muốn biết cách chuyển hướng các yêu cầu dành cho miềnA.ext sang https://domainA.ext/folderA và các yêu cầu dành cho miềnB.ext sang http://domainB
Tôi có nên tạo thư mục menu tùy chỉnh của riêng mình trong dự án Android được xây dựng trong Eclipse không? Ví dụ: tôi muốn tạo tiêu đề xuất hiện trong mọi hoạt động. Tôi biết menu phải ở dạng XML trong thư mục res/menu
Tôi đang sử dụng VS2008 và .net 3.5. Tôi đã tạo một thư viện lớp (Myproject.Controllers) trong giải pháp của mình. Trong lớp này tôi đã thêm một thư mục Bộ điều khiển. Trong thư mục tôi đã thêm
Tôi có một dự án mở rộng Visual Studio 2012 có chứa bước xây dựng sau mà tôi muốn sao chép các tệp .dll và .AddIn vào thư mục Visual Studio 2012 AddIns của người dùng hiện tại.
Tôi có một số lượt tải xuống tự động trên bản phân phối linux độc quyền. Họ đi đến đĩa cào tạm thời. Tôi muốn chuyển chúng sang mảng RAID chính khi chúng hoàn thành. Cách tốt nhất tôi có thể thấy là kiểm tra thư mục trên đĩa để xem nội dung có thay đổi vào phút cuối hay không.
Tôi hiện đang sử dụng SVN để kiểm soát phiên bản các dự án phần mềm của mình. Trong một dự án đang diễn ra, tôi có trung kế dành cho các tính năng và thông số kỹ thuật chung với khách hàng cũng như các chi nhánh dành cho những dự án dành riêng cho khách hàng. Có cách nào để đánh dấu một số tệp không nên hợp nhất vào nhánh mỗi khi tôi làm điều gì đó như thế này không?
Câu hỏi này đã có câu trả lời ở đây: Cách loại trừ một thư mục trong lệnh find . Cách xóa mọi thứ trong một thư mục và loại trừ các thư mục và tệp cụ thể
Làm cách nào để tạo thư mục hoặc tệp có ngày giờ hiện tại trong một thư mục cụ thể? DateTimeFormatter f = DateTimeFormatter.ofPattern("uuuuMMdd HHmmss") ;
Có cách nào để mở tệp hoặc thư mục ở thanh "Thư mục" bên trái của File Explorer của hệ thống không? Nếu không có điều này, tôi phải mở File Explorer và điều hướng đến nơi chứa thư mục để thao tác với các tệp, điều này thực sự bất tiện. Đối với hầu hết các công cụ có thanh điều hướng như thế này
Dự kiến: Tôi đã cài đặt gói bằng go get và nó đã tạo tất cả các thư mục cần thiết trong thư mục src, nhưng chúng chỉ xuất hiện trong thư mục pkg/mod và tôi không thể sử dụng chúng. Thực tế: Nó báo là đang tải xuống, hoàn tất rồi không có gì cả. Mọi thứ đều ở W
Giả sử foo.zip chứa: abc |- c1.exe |- c2.dll |- c3.dll trong đó a, b, c là các thư mục. Nếu tôi mở rộng-Lưu trữ .\foo.zip -Destin
Cách đây không lâu tôi đã xóa bộ nhớ đệm của Magento trong thư mục var. Tôi có thể sai, nhưng tôi nghĩ mình đã phạm sai lầm và thay vì xóa mọi thứ trong var/cache, tôi lại vô tình xóa mọi thứ trong var. Magento
Tôi có một số dự án mã trong các thư mục riêng biệt trong kho lưu trữ svn. Bây giờ tôi đang gặp một số vấn đề khi xóa tệp: hầu hết mọi thứ đều ổn, nhưng đôi khi khi tôi xóa tệp hoặc thư mục khỏi đĩa, quá trình đăng ký lại gây ra nhiều lỗi khác nhau. Vì vậy tôi muốn biết: trong sv
Có cách nào để tự động xóa tất cả các file hoặc thư mục với rất ít dòng lệnh R không? Tôi biết về các hàm unlink() hoặc file.remove(), nhưng đối với các hàm này, bạn cần xác định một vectơ ký tự chứa tất cả tên của các tệp bạn muốn xóa.
Lệnh powershell để tìm các tệp trong thư mục không đáp ứng tiêu chí phạm vi ngày của bộ lọc LastWriteTime của Get-Childitem là gì? Vì vậy, vui lòng kiểm tra danh mục để biết các mục không có vào ngày 10/01/2012 (ngày 1 tháng 10).
Tôi đang viết trình cài đặt NSIS cho một trong những ứng dụng được công ty tôi làm việc sử dụng nội bộ và quá trình cài đặt hoạt động tốt, tất cả các khóa REG đều được tạo và không có vấn đề gì với các thư mục và dịch vụ mà ứng dụng sử dụng. Vì lý do nào đó tôi không thể hiểu được, quá trình gỡ cài đặt không hoạt động.
Tôi có một tệp Excel và trong cùng một thư mục, tôi cũng có một thư mục chứa tệp CSV mà tôi muốn đưa vào. Sử dụng truy vấn "từ thư mục", bước đầu tiên sẽ đưa ra truy vấn sau: = Folder.Files("D:\OneDrive\D
Tôi đang chơi với ScyllaDB trong docker. Để ScyllaDB chạy hiệu quả nhất trong thiết lập sản xuất docker, nó cần có đĩa được định dạng XFS. Bạn có biết cách tạo khối lượng bộ chứa XFS, tệp đĩa trong Linux và MacO không? Cảm ơn
Về cơ bản, tôi nên viết một hàm chứa tích của mỗi phép nhân trước đó của số đó như thế này: > productionFromLeftToRight [2,3,4,5] [120,60,20,5] Tôi nên sử dụng hàm bậc cao hơn, chẳng hạn như gấp
Tôi là một lập trình viên xuất sắc, rất giỏi!