hey guys !!!
Cho mình hỏi có thể tạo mảng 1 chiều chứa lớp cha không ?
Vì mình muốn đa hình được từng thằng con ạ
Nếu được thì khai báo như thế nào ạ ?
Mình loay hoay nãy giờ k được 
Có thể tạo mảng một chiều chứa lớp cha được không?
thay vì chứa lớp cha thì em chứa con trỏ tới lớp cha để chứa được nhiều lớp con của lớp cha:
// Cách 1: ưu tiên xài, ko cần quản lý bộ nhớ gì hết vì
// phần tử của mảng là smart pointer
vector<unique_ptr<Base>> a;
a.push_back(make_unique<Derived1>(/*...*/));
a.push_back(make_unique<Derived2>(/*...*/));
a.push_back(make_unique<Base>(/*...*/));
// Cách 2: ko khuyến khích nhưng đơn giản hơn vì
// phần tử của mảng chỉ là con trỏ thông thường,
// nhớ phải giải phóng từng phần tử sau khi xài xong
vector<Base*> b;
b.push_back(new Derived1(/*...*/));
b.push_back(new Derived2(/*...*/));
b.push_back(new Base(/*...*/));
//...
// Nhớ giải phóng bộ nhớ
for (auto p : b) delete p; // for (int i = 0; i < b.size(); ++i) delete b[i];
// Cách 3: thủ công, xài con trỏ 2 cấp, gọn nhẹ
// khi số phần tử trong mảng ko thay đổi
// phải nhớ giải phóng bộ nhớ khi đã xài xong
// ko khuyến khích, nên xài cách 1.
int n;
cin >> n;
Base** c = new Base*[n];
c[0] = new Derived1(/*...*/));
c[1] = new Derived2(/*...*/));
//...
// Nhớ giải phóng bộ nhớ
for (auto p : c) delete p; // for (int i = 0; i < c.size(); ++i) delete c[i];
delete[] c; // xài delete[] cho mảng
4 Likes
cái vector em biết rồi ạ
Những e hỏi cho cái mảng thôi ạ
Giờ ý là không nên hay k được ạ
em biết mỗi cái kiểu như này: vector<Nguoi*> ds_nguoi;
Cái cách một ấy em chưa hiểu lắm
Nó gọi là gì để e tra gg cái ạ
smart pointer thôi em à :V std::unique_ptr
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?