CÂU HỎI 1)C++ Cơ sở constructor gọi với tham số đó sẽ được xây dựng trong các nhà xây dựng có nguồn gốc
class Base {
Base(std::string name);
virtual std::string generateName();
}
class Derived : Base {
Derived();
virtual std::string generateName();
}
ở đây có các câu hỏi:
phương pháp gì sẽ được kêu gọi generateName()?
Derived :: Derived : Base(generateName()) {
//what method will be called on generateName() ?
}
CÂU HỎI 2)
làm thế nào tôi nên làm cho nó? nếu constructor mặc định phải chấp nhận một tham số, nhưng tôi cần phải tạo tham số đó trong hàm tạo Derived?
Điều này sẽ đúng nếu 'generateName()' được gọi từ * bên trong * 'Base :: Base'. Nhưng ở đây, chúng ta đang gọi nó trong danh sách khởi tạo, trước khi chúng ta nhập 'Base :: Base'. Điều này vẫn đúng? –
Ah, bạn đã cập nhật câu trả lời của mình. Điều này cảm thấy ngay bây giờ, vì vậy +1. –
@Oli: Không. Tôi đã sai và đã sửa câu trả lời sau khi nghiên cứu vấn đề và chạy một số thử nghiệm. Tôi thực sự hơi ngạc nhiên bởi hành vi được chỉ định. Nó cảm thấy sai với tôi ;-) (Nó phá vỡ mô hình mà tôi thường sử dụng để lý luận về các cuộc gọi chức năng ảo trong quá trình xây dựng và bây giờ tôi phải quay lại và tìm tất cả các câu trả lời trong đó tôi đã mô tả sai quá trình .. .) Cảm ơn bạn đã đặt câu hỏi về câu trả lời gốc. –