Có thể tạo mảng một chiều chứa lớp cha được không?

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 :frowning:

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?