Đã lâu rồi tôi phải viết mã C++ và tôi cảm thấy ngớ ngẩn. Tôi đã viết mã mà là tương tự, nhưng không phải là chính xác, mã bên dưới:Làm cách nào để truyền một lớp cha mẹ làm lớp con
class Parent
{
...
};
class Child : public Parent
{
...
};
class Factory
{
static Parent GetThing() { Child c; return c; }
};
int main()
{
Parent p = Factory::GetThing();
Child c1 = p; // Fails with "Cannot convert 'Parent' to 'Child'"
Child c2 = (Child)p; // Fails with "Could not find a match for 'TCardReadMessage::TCardReadMessage(TCageMessage)'"
}
Tôi biết điều này được coi là đơn giản nhưng tôi không chắc chắn những gì tôi đang làm sai.
Tôi không hiểu nhà máy đang làm gì. Có vẻ như nó trả về biến cục bộ. Đối tượng đó có hợp lệ không? – John
@John: nó trả về một bản sao của một đối tượng địa phương. Sự trở lại là giá trị, do đó, nó không quan trọng cho dù bản gốc chết sau đó (và tất nhiên, nó không). Không có gì sai với điều đó, khác hơn là nó không thích hợp cho một chức năng nhà máy ... –
Vâng, phương thức GetThing trên lớp Factory sẽ trả về một biến cục bộ. Mà dường như sẽ không làm những gì tôi muốn. Tôi nên sử dụng con trỏ để thay thế. Ít nhất là theo các câu trả lời dưới đây. – Mykroft