Ví dụ: trong chức năng chính, tôi muốn nhận dữ liệu nhập của người dùng. Tùy thuộc vào đầu vào, tôi sẽ tạo một số Rectangle
hoặc Circle
, là các lớp con của Object
. Nếu không có đầu vào (hoặc không biết), thì tôi sẽ chỉ tạo một đối tượng chung.Làm thế nào để khởi tạo các lớp con khác nhau có điều kiện?
class Object
{
public:
Object();
void Draw();
private:
....
};
class Rectangle:public Object
{
public:
Rectangle();
.... //it might have some additional functions
private:
....
};
class Circle:public Object
{
public:
Circle();
.... //it might have some additional functions
private:
....
};
Chức năng chính:
string objType;
getline(cin, objType);
if (!objType.compare("Rectangle"))
Rectangle obj;
else if (!objType.compare("Circle"))
Circle obj;
else
Object obj;
obj.Draw();
Tất nhiên, các mã trên sẽ không làm việc vì tôi không thể tạo một đối tượng bên trong một lệnh If. Vì vậy, tôi đã thử một cái gì đó như thế này.
Object obj;
if (!objType.compare("Rectangle"))
obj = Rectangle();
else if (!objType.compare("Circle"))
obj = Circle();
obj.Draw();
Mã này sẽ biên dịch, nhưng nó sẽ không làm những gì tôi muốn. Đối với một số lý do, đối tượng không được khởi tạo theo cách lớp con nên (ví dụ, tôi đặt các biến thành viên của một số đối tượng, cụ thể là một véc tơ, khác nhau trong các lớp con). Tuy nhiên, khi tôi đặt một điểm break tại constructor Child class, nó đã chạy qua đó.
Vậy làm cách nào để đặt đối tượng khởi tạo làm lớp con trong một số câu lệnh if?
Nó hoạt động! Ngoài giải pháp cho vấn đề của tôi, cảm ơn vì đã giải thích tốt về cách thức các lớp và con trỏ hoạt động trong C+++! – tuzzer