Tôi không hiểu tại sao việc gán một lớp dẫn xuất không gọi toán tử tương ứng của lớp cơ sở, nếu nó không tồn tại. Xem mã:Toán tử gán C++ trong lớp dẫn xuất
#include <iostream>
using namespace std;
class A{
protected:
void myWrite(){
cout << " Base " <<endl;
}
public:
double x,y;
A(): x{0},y{0}{};
virtual A & operator=(double g){x=g;y=g;return *this;}
virtual ~A(){};
virtual void doneit(){myWrite();}
};
class B: public A{
protected:
public:
B():A(){};
virtual ~B(){};
virtual void doneit(){myWrite();}
};
int main() {
A jj;
B pp;
pp=0.0;
return 0;
}
Vì mã không biên dịch. Tất nhiên nếu tôi xác định một "toán tử =" cho B giống hệt nhau cho A, mọi thứ hoạt động, nhưng tại sao toán tử B "=" không được gọi theo mặc định nếu một trong lớp dẫn xuất không được định nghĩa ?? Bạn có thể giúp làm sáng tỏ vấn đề này không?
Trình biên dịch gcc cho biết ../src/tito.cpp:40:4: lỗi: không thể quá tải có thể '=' pp = 0,0; ~~^~~~ ../src/tito.cpp:28:7: lưu ý: hàm ứng cử viên (toán tử gán bản sao ngầm) không thể thực hiện được: không có chuyển đổi nào được biết từ 'double' thành 'const B' cho đối số thứ nhất loại B: công khai A { ^ 1 lỗi được tạo.
Bạn có thể giải thích lý do tại sao nó không hoạt động?
Vâng, lý do chính là 'điều hành của cha mẹ mà = 'không gán một phần của đứa trẻ để ngầm sử dụng nó easilly có thể tạo các đối tượng bị hỏng. – StenSoft
Cảm ơn bạn đã nhận xét rất hữu ích !! – Max