Được rồi vì vậy tôi có một lớp học có 'đánh máy yếu' I.E. nó có thể lưu trữ nhiều loại khác nhau định nghĩa là:C++: Toán tử quá tải =
#include <string>
class myObject{
public:
bool isString;
std::string strVal;
bool isNumber;
double numVal;
bool isBoolean;
bool boolVal;
double operator= (const myObject &);
};
Tôi muốn quá tải toán tử gán như thế này:
double myObject::operator= (const myObject &right){
if(right.isNumber){
return right.numVal;
}else{
// Arbitrary Throw.
throw 5;
}
}
Vì vậy mà tôi có thể làm điều này:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number = obj;
}
Nhưng khi Tôi làm như vậy, tôi nhận được:
error: cannot convert ‘myObject’ to ‘double’ in initialization
Khi chuyển nhượng.
Tôi cũng đã cố gắng:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number;
number = obj;
}
Để mà tôi nhận được:
error: cannot convert ‘myObject’ to ‘double’ in assignment
Có điều gì tôi đang thiếu? hoặc đơn giản là không thể thực hiện chuyển đổi như vậy bằng cách quá tải operator=
.
IMO, "gõ nhẹ" nói chung là một nỗi đau để làm việc với trong C + +, nhưng có lẽ bạn nên xem xét tăng :: bất kỳ và tăng :: biến thể bởi vì bánh xe tốt hơn đã được phát minh. – UncleBens
Điều này trông rất giống với định nghĩa của một ngôn ngữ C 'union'. Nó cũng hoạt động với OOP bằng cách thực hiện một thử nghiệm dựa trên kiểu của một đối tượng. –