Tôi có hai lớpcopy constructor của cơ sở và các lớp thừa kế
///////////BASE CLASS
class Base{
public:
Base(int = 0);
~Base();
Base(Base&);
Base(Derived&); ////<-may be problem here?, note: I tried without this function
int valueOfBase();
protected:
int protectedData;
private:
int baseData;
};
/////////////DERIVED CLASS
class Derived: public Base{
public:
Derived(int);
//Derived(Derived&);
~Derived();
private:
int derivedData;
};
and here my main
int main(){
Base base(1);
Derived derived = base;
return 0;
}
tôi đọc rằng nếu lớp có nguồn gốc của tôi không có bản sao c'tor copy c'tor of the base will be called
nhưng mỗi khi tôi nhận conversion from Base to non-scalar type Derived requested
người là sai? trình biên dịch của tôi hoặc cuốn sách của tôi, hoặc tôi vừa hiểu nhầm? cảm ơn trước
Bạn có thể đã đọc sai (trình tạo bản sao được tạo bởi trình biên dịch cho Derived * cũng * sao chép phần Cơ sở của đối tượng, sử dụng hàm tạo bản sao của Cơ sở). - Sử dụng hàm tạo bản sao của parent * thay cho * không có ý nghĩa: điều đó có nghĩa là * theo mặc định * các đối tượng sẽ được cắt lát khi sao chép. – UncleBens