Câu hỏi của tôi như sau: Giả sử tôi có:
lớp học
{
public:
Foo() {}
void setInt(int i) { myInt = i }
int getInt() { return myInt }
private:
int myInt;
};
thanh lớp
{
public:
Bar(Foo f) { /* làm gì đó với f.getInt() */ }
};
Bây giờ tôi có một lớp khác với Bar là biến thành viên:
người dùng lớpBar
{
public:
BarUser();
private:
Thanh bar;
};
Tôi muốn viết một hàm tạo cho BarUser, nhưng tôi muốn khởi tạo Bar với thành viên Foo là số nguyên bằng 3. Ngay lập tức:
Foo f;
f.setInt(3);
thanh b(f);
Nhưng vì tôi có Bar là thành viên của lớp nên tôi không thể viết tất cả mã này vào danh sách khởi tạo... Ý tôi là:
BarUser::BarUser() : bar(/* Foo sau khi thực hiện f.setInt(3) */)
{ ... }
Giả sử Bar không cho phép toán tử gán - làm cách nào để khởi tạo nó như mong đợi?
Cảm ơn!
câu trả lời hay nhất
nếu bạn không thể thay đổiFoo
, viết hàm:
Foo make_foo(int i) {
Foo f;
f.setInt(i);
trả lại f;
}
Sau đó sử dụng thanh(make_foo(3))
khởi tạo.
bạn cho Foo
một hàm tạo nhưng không được đưa ra int
Các nhà xây dựng kiểu như tự bắn vào chân mình. Tốt nhất là bạn nên rõ ràng
Trình xây dựng được thêm vào để áp dụng int
của Foo
.
Về C++ - Khởi tạo thành viên lớp bằng cách sử dụng phiên bản, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/12894873/