Tôi muốn tiêm một số thông tin cơ bản vào một lớp dẫn xuất mà nó có thể xây dựng trên đó. Lớp dẫn xuất không nên quan tâm đến việc khởi tạo các thông tin đó, nó chỉ nên ở đó.Có cách nào để tạo một cá thể có nguồn gốc từ một cá thể cơ bản không?
Điều đó một mình sẽ dễ dàng có thể thông qua kế thừa. Nhưng vấn đề là lớp cơ sở không biết giá trị của riêng nó. Thay vào đó, chúng cần được chuyển thành tham số. Tuy nhiên, vì lớp dẫn xuất không cần phải quan tâm đến điều đó, việc tạo đường hầm cho các tham số thông qua các hàm tạo có nguồn gốc gọi là hàm tạo cơ bản với nó là không có tùy chọn.
Giải pháp duy nhất tôi có thể nghĩ là làm cho thông tin có sẵn tĩnh để lớp cơ sở có thể nhận được chúng mà không cần trợ giúp. Nhưng tôi muốn tránh điều đó.
Có cách nào để tạo và khởi tạo lớp cơ sở đầu tiên và mở rộng cá thể thành một kiểu dẫn xuất sau đó không? Nếu không, làm thế nào tôi có thể đạt được thứ tự tạo và phụ thuộc này bằng cách sử dụng các tính năng sẵn có của C++?
#include <string>
#include <iostream>
using namespace std;
class Base {
public:
Base(string name, int age) : name(name), age(age) {}
protected:
const string name;
int age = 0;
};
class Derived : public Base {
Derived() { // No parameters here, no call to base constructor
cout << "My name is " << name << " and I'm " << age << "." << endl;
}
}
Base base("Peter", 42);
Derived derived(base); // "My name is Peter and I'm 42."
"Không có lời gọi đến cơ sở xây dựng" của bạn làm cho tôi trả lời: Không. Đó không phải là cách C++ hoạt động. – Quentin
TL; DR; [Mẫu thử nghiệm] (http://sourcemaking.com/design_patterns/prototype) có thể giúp ích cho trường hợp sử dụng của bạn. –